Blog

Definieren Sie ein benutzerdefiniertes Authentifizierungsschema für Ihre VSTS-Erweiterung

Jesse Houwing

Aktualisiert Oktober 22, 2025
4 Minuten
Zu den Standard-Authentifizierungsschemata in VSTS gehören Basic (Benutzername/Passwort), Token, Service Credential (für Azure) und AzureCertificate Authentication. Wenn Sie lediglich einen Benutzernamen, ein Passwort oder ein persönliches Zugriffstoken benötigen, können Sie Ihren eigenen Credential-Typ aus einem der vorhandenen Authentifizierungsschemata ableiten.

Ein Beispiel für diese Technik sehen Sie in meinen VSTS-Erweiterungsaufgaben

{
"id": "Marktplatz-Service-Endpunkt",
"Beschreibung": "Visual Studio Marketplace",
"Typ": "ms.vss-endpoint.service-endpoint-type",
"Ziele": [
"ms.vss-endpoint.endpoint-types"
],
"Eigenschaften": {
"Name": "Marktplatz-Auth-Schlüssel",
"displayName": "Visual Studio Marketplace",
"url": "https://app.market.visualstudio.com/_apis/gallery",
"authenticationSchemes": [
{
"type": "ms.vss-endpoint.endpoint-auth-scheme-token"
},
{
"typ": "ms.vss-endpoint.endpoint-auth-scheme-basic"
}
]
}
}

Was aber, wenn Sie über die Grundlagen hinausgehen wollen? Es gibt Möglichkeiten, die Benutzeroberfläche mit zusätzlichen Textfeldern zu erweitern, wie in einigen der anderen Erweiterungen, die Sie auf GitHub finden.

{
"id": "saucelabs-endpoint-type",
"Beschreibung": "Sauce Labs Credentials",
"Typ": "ms.vss-endpoint.service-endpoint-type",
"Ziele": [ "ms.vss-endpoint.endpoint-types" ],
"Eigenschaften": {
"Name": "saucelabs",
"displayName": "Sauce Labs Anmeldeinformationen",
"url": "https://saucelabs.com/rest/v1/",
"inputDescriptors": [],
"authenticationSchemes": [
{
"Typ": "ms.vss-endpoint.endpoint-auth-scheme-basic",
"inputDescriptors": [
{
"id": "Benutzername",
"Name": "Benutzername",
"Beschreibung": "Benutzername",
"inputMode": "textbox",
"isVertraulich": false,
"validation": { "isRequired": false, "dataType": "string" }
},
{
"id": "Passwort",
"name": "API Token",
"Beschreibung": "API Token auf Ihrer Saucelabs-Kontoseite gefunden",
"inputMode": "textbox",
"isVertraulich": true,
"validation": { "isRequired": true, "dataType": "string" }
}
]
}
]
}
}
}

HINWEIS: Microsoft hat mich gebeten, Ihnen zu erklären, dass der unten stehende Code zwar Ihr benutzerdefiniertes Authentifizierungsschema erstellt, das Produkt aber immer noch davon ausgeht, dass die Standardliste der Authentifizierungsschemata festgelegt ist. Sie werden auf unvorhergesehene Probleme stoßen, bis sich diese Liste irgendwann vollständig öffnet.

Ich überlasse Ihnen das unten stehende Stück als Referenz, da es eine gute Möglichkeit ist, zu verstehen, wie die Erweiterbarkeit funktioniert und wie Elemente definiert werden, aber bitte verwenden Sie es im Moment nicht, um benutzerdefinierte Autorisierungsschemata zu erstellen. Auch wenn Ihre Erweiterung wahrscheinlich alle Validierungen bestehen wird, kann sie für Ihre Kunden alle möglichen Probleme verursachen.

Erweitern Sie stattdessen das Basic- oder Token-Authentifizierungsschema um zusätzliche Parameter und ändern Sie den Namen/die Beschreibung, damit die Benutzeroberfläche Ihren Bedürfnissen entspricht.

Wenn Sie darüber hinausgehen und Ihre eigene Benutzeroberfläche mit eigenen Feldern definieren möchten, ist der nächste Schritt die Definition eines eigenen Endpunkt-Auth-Schemas. Die Dokumentation zu diesem Beitragspunkt ist noch spärlich, aber wenn Sie sich in eine TFS 2015 Update 2 Installation vertiefen, werden Sie einige sehr nützliche Beispiele finden.

Navigieren Sie zu C:ProgrammeMicrosoft Team Foundation Server 14.0ToolsDeployTfsServicingFilesExtensions, um die Standard-Erweiterungen zu finden, die das grundlegende Verhalten einer Standardinstallation definieren. Darin finden Sie 4 vsix Dateien



Wenn Sie etwas tiefer graben, finden Sie die Datei extension.vsomanifest, die den gesuchten Json-Schnipsel enthält. Das Beispiel aus dem Service Credential ist eines der umfangreichsten:

{
"Beiträge": [
{
"id": "endpoint-auth-scheme-service-principal",
"Beschreibung": "Dienst Prinzipal-basiertes Endpunkt-Authentifizierungsschema",
"type": "ms.vss-endpoint.service-endpoint-auth-scheme",
"Ziele": [
"ms.vss-endpoint.endpoint-auth-schemes"
],
"Eigenschaften": {
"Name": "ServicePrincipal",
"displayName": "Dienstprinzipal-Authentifizierung",
"inputDescriptors": [
{
"id": "servicePrincipalId",
"name": "Service Principal Id",
"Beschreibung": "Client Id für die Verbindung zum Endpunkt.nVerweisen Sie auf den Link zur Erstellung eines Azure Service Principal.",
"inputMode": "textbox",
"isVertraulich": false,
"Validierung": {
"isRequired": true,
"dataType": "string"
}
},
{
"id": "servicePrincipalKey",
"name": "Hauptschlüssel des Dienstes",
"Beschreibung": "Service Principle Key für die Verbindung zum Endpunkt.nVerweisen Sie auf den Link zur Erstellung von Azure Service Principal.",
"inputMode": "passwordbox",
"isVertraulich": true,
"Validierung": {
"isRequired": true,
"dataType": "string"
}
},
{
"id": "tenantId",
"name": "Mieter Id",
"Beschreibung": "Tenant Id für die Verbindung zum Endpunkt.nVerweisen Sie auf den Link zur Erstellung eines Azure Service Principal.",
"inputMode": "textbox",
"isVertraulich": false,
"Validierung": {
"isRequired": true,
"dataType": "guid"
}
}
]
}
}
]
}
Sie können diese in Ihre eigenen Erweiterungsmanifeste einfügen, um einen vollständig benutzerdefinierten Endpunkt-Berechtigungstyp mit einem vollständig benutzerdefinierten Authentifizierungsschema zu erstellen. Das unten stehende Beispiel kann für genau diese Zwecke angepasst werden:

{
"manifestVersion": 1,
"id": "jessehouwing-vsts-custom-authscheme",
"name": "Benutzerdefiniertes Authscheme",
"Version": "0.0.0",
"Herausgeber": "jessehouwing",
"Ziele": [
{
"id": "Microsoft.VisualStudio.Services"
}
],
"Umfang": [
],
"Beschreibung": "Erstellt ein benutzerdefiniertes Authentifizierungsschema und eine passende Endpunktdefinition",
"Kategorien": [
"Integrieren"
],
"Tags": [
"Probe"
],
"screenshots": [
],
"Inhalt": {
},
"Links": {
},
"Branding": {
"Farbe": "rgb(36, 43, 50)",
"Thema": "dunkel"
},
"Icons": {
},
"Dateien": [
],
"Beiträge": [
{
"id": "endpoint-auth-scheme-custom",
"Beschreibung": "Jesses eigenes Schema.",
"type": "ms.vss-endpoint.service-endpoint-auth-scheme",
"Ziele": [
"ms.vss-endpoint.endpoint-auth-schemes"
],
"Eigenschaften": {
"name": "CustomAuthScheme",
"displayName": "Jesses benutzerdefiniertes Authentifizierungsschema",
"inputDescriptors": [
{
"id": "E-Mail",
"Name": "E-Mail",
"Beschreibung": "E-Mail.",
"inputMode": "textbox",
"isVertraulich": false,
"Validierung": {
"isRequired": true,
"dataType": "string"
}
},
{
"id": "Passphrase",
"Name": "Passphrase",
"Beschreibung": "Passphrase.",
"inputMode": "passwordbox",
"isVertraulich": true,
"Validierung": {
"isRequired": true,
"dataType": "string"
}
}
]
}
},

{
"id": "Marktplatz-Service-Endpunkt",
"Beschreibung": "Visual Studio Marketplace",
"Typ": "ms.vss-endpoint.service-endpoint-type",
"Ziele": [
"ms.vss-endpoint.endpoint-types"
],
"Eigenschaften": {
"Name": "my-custom-scheme",
"displayName": "Benutzerdefiniertes Schema",
"url": "https://app.market.visualstudio.com/_apis/gallery",
"authenticationSchemes": [
{
"Typ": "endpoint-auth-scheme-custom"
}
]
}
}
]
}


Verfasst von

Jesse Houwing

Jesse is a passionate trainer and coach, helping teams improve their productivity and quality all while trying to keep work fun. He is a Professional Scrum Trainer (PST) through Scrum.org, Microsoft Certified Trainer and GitHub Accredited Trainer. Jesse regularly blogs and you'll find him on StackOverflow, he has received the Microsoft Community Contributor Award three years in a row and has been awarded the Microsoft Most Valuable Professional award since 2015. He loves espresso and dark chocolate, travels a lot and takes photos everywhere he goes.

Contact

Let’s discuss how we can support your journey.