Last week I was working on an extension for a customer. I had to build it from the ground up but ran into some issues regarding service connections while using the documentation of Microsoft. My goal was to create an extension with a token-based service connection.
I have never created an extension that required a service connection. So everything was new to me. A problem I ran into was that the service connection just wouldn’t show up in Azure DevOps, but the CI/CD building of the extension did not give any configuration errors. None of the solutions offered on the Microsoft Docs website worked for me. After a while of trying and debugging, I gave up and went looking for examples on GitHub. I knew about the SonarQube extension, that extension has a service connection. Luckily it is an opensource repository on GitHub. So I compared their vss-extension.json with mine and found some differences.

Above is a somewhat example of the JSON file I created. Compared to the SonarQube extension it was missing some critical components like an authenticationScheme with a token schema type. Also, the type and target are pointing towards an auth scheme, but these should just point to the “service-endpoint-type”.
Every property above the “properties” block should focus on the service connection and not on schemes. In the code-block below I fixed all these issues.
End result
The end result to create a token-based service connection:
{ | |
"id": "endpoint-auth-scheme-token", | |
"description": "i18n:Token based endpoint authentication scheme", | |
"type": "ms.vss-endpoint.service-endpoint-type", | |
"targets": [ | |
"ms.vss-endpoint.endpoint-types" | |
], | |
"properties": { | |
"name": "Token", | |
"displayName": "i18n:Token Based Authentication", | |
"authenticationSchemes": [ | |
{ | |
"type": "ms.vss-endpoint.endpoint-auth-scheme-token", | |
"headers": [ | |
{ | |
"name": "Authorization", | |
"value": "{{endpoint.apitoken}}" | |
} | |
], | |
"inputDescriptors": [ | |
{ | |
"id": "apitoken", | |
"name": "i18n:API Token", | |
"description": "i18n:API Token for connection to endpoint", | |
"inputMode": "textbox", | |
"isConfidential": true, | |
"validation": { | |
"isRequired": true, | |
"dataType": "string", | |
"maxLength": 300 | |
} | |
} | |
] | |
} | |
] | |
} | |
} |
Updated the Microsoft documentation
The Microsoft Docs is opensource. This means everyone can update the documentation pages, so I decided to create a (my first) pull request to update the schemes and the PR got accepted! That was such a cool feeling. My changes can be seen on the Microsoft Docs page about authentication schemes.
Conclusion
This is what I came across while working with a custom extension. I hope it gave you some insight if you ran across the same problems. If it did not help, let me know.