Authentifizieren des Zugriffs auf REST-APIs mit OAuth 2.0
Azure DevOps Services
In diesem Artikel erfahren Sie, wie Sie Ihre Web-App-Benutzer für den REST-API-Zugriff authentifizieren, damit Ihre App nicht mehr nach Benutzernamen und Kennwörtern fragt.
Hinweis
Die folgende Anleitung richtet sich an Azure DevOps Services Benutzer, da OAuth 2.0 auf Azure DevOps Server nicht unterstützt wird. Clientbibliotheken sind eine Reihe von Paketen, die speziell für die Erweiterung Azure DevOps Server Funktionalität entwickelt wurden. Für lokale Benutzer wird die Verwendung von Clientbibliotheken, Windows-Authentifizierung oder persönlichen Zugriffstoken (Personal Access Token, PATs) empfohlen, um sich im Namen eines Benutzers zu authentifizieren.
Azure DevOps Services verwendet das OAuth 2.0-Protokoll, um Ihre App für einen Benutzer zu autorisieren und ein Zugriffstoken zu generieren. Verwenden Sie dieses Token, wenn Sie die REST-APIs aus Ihrer Anwendung aufrufen.
Wenn Sie Azure DevOps Services-APIs für diesen Benutzer aufrufen, verwenden Sie das Zugriffstoken dieses Benutzers. Aktualisieren Sie das Zugriffstoken, wenn es abgelaufen ist.
Ein C#-Beispiel für den Gesamtfluss finden Sie unter vsts-auth-samples.
Hinweis
Sie können eine Anwendung in Ihrem instance von Azure Active Directory (Azure AD) registrieren. Weitere Informationen finden Sie unter OAuth 2.0-Authentifizierung mit Azure AD und OpenID Connect-Protokoll.
1. Registrieren Ihrer App
Wechseln Sie zu
https://app.vsaex.visualstudio.com/app/register
, um Ihre App zu registrieren.Wählen Sie die Bereiche aus, die Ihre Anwendung benötigt, und verwenden Sie dann die gleichen Bereiche, wenn Sie Ihre App autorisieren. Wenn Sie Ihre App mithilfe der Vorschau-APIs registriert haben, registrieren Sie sich erneut, da die von Ihnen verwendeten Bereiche jetzt veraltet sind.
Wählen Sie Anwendung erstellen aus.
Die Seite mit den Anwendungseinstellungen wird angezeigt.
Wenn Azure DevOps Services Ihrem Benutzer die Autorisierungsgenehmigungsseite anzeigt, werden der Firmenname, der App-Name und die Beschreibungen verwendet. Außerdem werden die URLs für die Website Ihres Unternehmens, die App-Website sowie die Nutzungsbedingungen und Datenschutzbestimmungen verwendet.
Wenn Azure DevOps Services die Autorisierung eines Benutzers anfragt und der Benutzer sie gewährt, wird der Browser des Benutzers mit dem Autorisierungscode an ihre Autorisierungsrückruf-URL umgeleitet. Die Rückruf-URL muss eine sichere Verbindung (HTTPS) sein, um den Code zurück an die App zu übertragen und genau mit der in Ihrer App registrierten URL zu übereinstimmen. Wenn dies nicht der Fall ist, wird eine 400-Fehlerseite anstelle einer Seite angezeigt, auf der der Benutzer aufgefordert wird, die Autorisierung für Ihre App zu erteilen.
Rufen Sie die Autorisierungs-URL auf, und übergeben Sie Ihre App-ID und autorisierte Bereiche, wenn Sie möchten, dass ein Benutzer Ihre App für den Zugriff auf seine organization autorisiert. Rufen Sie die Zugriffstoken-URL auf, wenn Sie ein Zugriffstoken zum Aufrufen einer Azure DevOps Services REST-API abrufen möchten.
Die Einstellungen für jede App, die Sie registrieren, sind in Ihrem Profil https://app.vssps.visualstudio.com/profile/view
verfügbar.
2. Autorisieren Ihrer App
- Wenn Ihr Benutzer Ihre App noch nicht für den Zugriff auf ihre organization autorisiert hat, rufen Sie die Autorisierungs-URL auf. Es ruft Sie mit einem Autorisierungscode zurück, wenn der Benutzer die Autorisierung genehmigt.
https://app.vssps.visualstudio.com/oauth2/authorize
?client_id={app ID}
&response_type={Assertion}
&state={state}
&scope={scope}
&redirect_uri={callback URL}
Parameter | type | Hinweise |
---|---|---|
client_id | GUID | Die ID, die Ihrer App bei der Registrierung zugewiesen wurde. |
response_type | Zeichenfolge | Assertion |
state | Zeichenfolge | Kann ein beliebiger Wert sein. In der Regel ein generierter Zeichenfolgenwert, der den Rückruf mit der zugeordneten Autorisierungsanforderung korreliert. |
scope | Zeichenfolge | Bereiche, die bei der App registriert sind. Leerzeichen getrennt. Weitere Informationen finden Sie unter verfügbare Bereiche. |
redirect_uri | URL | Rückruf-URL für Ihre App. Muss genau mit der URL übereinstimmen, die bei der App registriert ist. |
- Fügen Sie ihrer Website einen Link oder eine Schaltfläche hinzu, die den Benutzer zum Azure DevOps Services Autorisierungsendpunkt führt:
https://app.vssps.visualstudio.com/oauth2/authorize
?client_id=88e2dd5f-4e34-45c6-a75d-524eb2a0399e
&response_type=Assertion
&state=User1
&scope=vso.work%20vso.code_write
&redirect_uri=https://fabrikam.azurewebsites.net/myapp/oauth-callback
Azure DevOps Services fordert den Benutzer auf, Ihre App zu autorisieren.
Wenn der Benutzer dies akzeptiert, leitet Azure DevOps Services den Browser des Benutzers an Ihre Rückruf-URL um, einschließlich eines kurzlebigen Autorisierungscodes und des Statuswerts in der Autorisierungs-URL:
https://fabrikam.azurewebsites.net/myapp/oauth-callback
?code={authorization code}
&state=User1
3. Abrufen eines Zugriffs- und Aktualisierungstokens für den Benutzer
Verwenden Sie den Autorisierungscode, um ein Zugriffstoken (und ein Aktualisierungstoken) für den Benutzer anzufordern. Ihr Dienst muss eine Service-to-Service-HTTP-Anforderung an Azure DevOps Services.
URL: App autorisieren
POST https://app.vssps.visualstudio.com/oauth2/token
HTTP-Anforderungsheader : App autorisieren
Header | Wert |
---|---|
Content-Type | application/x-www-form-urlencoded |
Content-Type: application/x-www-form-urlencoded
HTTP-Anforderungstext: App autorisieren
client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&client_assertion={0}&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion={1}&redirect_uri={2}
Ersetzen Sie die Platzhalterwerte im vorherigen Beispielanforderungstext:
- {0}: URL-codierter geheimer Clientschlüssel, der bei der Registrierung der App abgerufen wurde
- {1}: URL-codierter "Code", der über den
code
Abfrageparameter für Ihre Rückruf-URL bereitgestellt wird - {2}: Bei der App registrierte Rückruf-URL
C#-Beispiel zum Erstellen des Anforderungstexts : App autorisieren
public string GenerateRequestPostData(string appSecret, string authCode, string callbackUrl)
{
return String.Format("client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&client_assertion={0}&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion={1}&redirect_uri={2}",
HttpUtility.UrlEncode(appSecret),
HttpUtility.UrlEncode(authCode),
callbackUrl
);
}
Antwort: App autorisieren
{
"access_token": { access token for the user },
"token_type": { type of token },
"expires_in": { time in seconds that the token remains valid },
"refresh_token": { refresh token to use to acquire a new access token }
}
Wichtig
Speichern Sie die refresh_token sicher, damit Ihre App den Benutzer nicht erneut zur Autorisierung auffordern muss. Zugriffstoken laufen schnell ab und sollten nicht beibehalten werden.
4. Verwenden des Zugriffstokens
Um ein Zugriffstoken zu verwenden, fügen Sie es als Bearertoken in den Autorisierungsheader Ihrer HTTP-Anforderung ein:
Authorization: Bearer {access_token}
Beispielsweise die HTTP-Anforderung zum Abrufen der neuesten Builds für ein Projekt:
GET https://dev.azure.com/myaccount/myproject/_apis/build-release/builds?api-version=3.0
Authorization: Bearer {access_token}
Aktualisieren eines abgelaufenen Zugriffstokens
Wenn das Zugriffstoken eines Benutzers abläuft, können Sie das Aktualisierungstoken verwenden, das er im Autorisierungsflow abgerufen hat, um ein neues Zugriffstoken abzurufen. Es ist wie beim ursprünglichen Prozess zum Austauschen des Autorisierungscodes gegen ein Zugriffs- und Aktualisierungstoken.
URL: Aktualisierungstoken
POST https://app.vssps.visualstudio.com/oauth2/token
HTTP-Anforderungsheader – Aktualisierungstoken
Header | Wert |
---|---|
Content-Type | application/x-www-form-urlencoded |
Content-Length | Berechnete Zeichenfolgenlänge des Anforderungstexts (siehe das folgende Beispiel) |
Content-Type: application/x-www-form-urlencoded
Content-Length: 1654
HTTP-Anforderungstext : Aktualisierungstoken
client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&client_assertion={0}&grant_type=refresh_token&assertion={1}&redirect_uri={2}
Ersetzen Sie die Platzhalterwerte im vorherigen Beispielanforderungstext:
- {0}: URL-codierter geheimer Clientschlüssel, der bei der Registrierung der App abgerufen wurde
- {1}: URL-codiertes Aktualisierungstoken für den Benutzer
- {2}: Bei der App registrierte Rückruf-URL
Antwort: Aktualisierungstoken
{
"access_token": { access token for this user },
"token_type": { type of token },
"expires_in": { time in seconds that the token remains valid },
"refresh_token": { new refresh token to use when the token has timed out }
}
Wichtig
Ein neues Aktualisierungstoken wird für den Benutzer ausgestellt. Speichern Sie dieses neue Token, und verwenden Sie es, wenn Sie das nächste Mal ein neues Zugriffstoken für den Benutzer abrufen müssen.
Bereiche
Wichtig
Bereiche ermöglichen nur den Zugriff auf REST-APIs und wählen Git-Endpunkte aus. Der SOAP-API-Zugriff wird nicht unterstützt.
Category | `Scope` | Name | BESCHREIBUNG |
---|---|---|---|
Agent-Pools | vso.agentpools |
Agentpools (lesen) | Ermöglicht das Anzeigen von Aufgaben, Pools, Warteschlangen, Agents und aktuell ausgeführten oder kürzlich abgeschlossenen Aufträgen für Agents. |
vso.agentpools_manage |
Agent-Pools (lesen, verwalten) | Gewährt die Möglichkeit, Pools, Warteschlangen und Agents zu verwalten. | |
vso.environment_manage |
Umgebung (lesen, verwalten) | Ermöglicht die Verwaltung von Pools, Warteschlangen, Agents und Umgebungen. | |
Analyse | vso.analytics |
Analyse (lesen) | Gewährt die Möglichkeit, Analysedaten abzufragen. |
Überwachung | vso.auditlog |
Überwachungsprotokoll (lesen) | Gewährt Benutzern die Möglichkeit, das Überwachungsprotokoll zu lesen. |
vso.auditstreams_manage |
Überwachungsdatenströme (lesen) | Gewährt Benutzern die Möglichkeit, Überwachungsdatenströme zu verwalten. | |
Build | vso.build |
Build (lesen) | Ermöglicht den Zugriff auf Buildartefakte, einschließlich Buildergebnissen, Definitionen und Anforderungen, sowie die Möglichkeit, Benachrichtigungen über Buildereignisse über Diensthooks zu empfangen. |
vso.build_execute |
Erstellen (Lesen und Ausführen) | Gewährt die Möglichkeit, auf Buildartefakte zuzugreifen, einschließlich Buildergebnissen, Definitionen und Anforderungen, sowie die Möglichkeit, einen Build in die Warteschlange zu stellen, Buildeigenschaften zu aktualisieren und Benachrichtigungen über Buildereignisse über Diensthooks zu empfangen. | |
Code | vso.code |
Code (Lesen) | Ermöglicht das Lesen von Quellcode und Metadaten zu Commits, Changesets, Branches und anderen Versionskontrollartefakten. Bietet außerdem die Möglichkeit, Code zu suchen und über Versionskontrollereignisse über Diensthooks benachrichtigt zu werden. |
vso.code_write |
Code (Lese- und Schreibzugriff) | Ermöglicht das Lesen, Aktualisieren und Löschen von Quellcode, den Zugriff auf Metadaten zu Commits, Changesets, Branches und anderen Versionskontrollartefakten. Ermöglicht außerdem das Erstellen und Verwalten von Pull Requests und Code Reviews sowie das Empfangen von Benachrichtigungen zu Versionskontrollereignissen über Diensthooks. | |
vso.code_manage |
Code (Lesen, Schreiben und Verwalten) | Ermöglicht das Lesen, Aktualisieren und Löschen von Quellcode, den Zugriff auf Metadaten zu Commits, Changesets, Branches und anderen Versionskontrollartefakten. Bietet außerdem die Möglichkeit, Coderepositorys zu erstellen und zu verwalten, Pull Requests und Code Reviews zu erstellen und zu verwalten sowie Benachrichtigungen zu Versionskontrollereignissen über Diensthooks zu erhalten. | |
vso.code_full |
Code (vollständig) | Gewährt vollzugriff auf Quellcode, Metadaten zu Commits, Changesets, Branches und anderen Versionskontrollartefakten. Bietet außerdem die Möglichkeit, Coderepositorys zu erstellen und zu verwalten, Pull Requests und Code Reviews zu erstellen und zu verwalten sowie Benachrichtigungen zu Versionskontrollereignissen über Diensthooks zu erhalten. Umfasst auch eingeschränkte Unterstützung für Client OM-APIs. | |
vso.code_status |
Code (status) | Gewährt die Möglichkeit, Commits und Pull Request-status zu lesen und zu schreiben. | |
Verbundener Server | vso.connected_server |
Verbundener Server | Gewährt die Möglichkeit, auf Endpunkte zuzugreifen, die von einem lokalen verbundenen Server benötigt werden. |
Ansprüche | vso.entitlements |
Berechtigungen (Lesen) | Bietet schreibgeschützten Zugriff auf den Lizenzierungsberechtigungsendpunkt, um Kontoberechtigungen abzurufen. |
vso.memberentitlementmanagement |
MemberEntitlement Management (read) | Gewährt die Möglichkeit, Benutzer, ihre Lizenzen sowie Projekte und Erweiterungen zu lesen, auf die sie zugreifen können. | |
vso.memberentitlementmanagement_write |
MemberEntitlement-Verwaltung (Schreiben) | Gewährt die Möglichkeit, Benutzer, deren Lizenzen sowie Projekte und Erweiterungen zu verwalten, auf die sie zugreifen können. | |
Erweiterungen | vso.extension |
Erweiterungen (lesen) | Gewährt die Möglichkeit, installierte Erweiterungen zu lesen. |
vso.extension_manage |
Erweiterungen (Lesen und Verwalten) | Gewährt die Möglichkeit zum Installieren, Deinstallieren und Ausführen anderer administrativer Aktionen für installierte Erweiterungen. | |
vso.extension.data |
Erweiterungsdaten (lesen) | Ermöglicht das Lesen von Daten (Einstellungen und Dokumenten), die von installierten Erweiterungen gespeichert sind. | |
vso.extension.data_write |
Erweiterungsdaten (Lese- und Schreibzugriff) | Ermöglicht das Lesen und Schreiben von Daten (Einstellungen und Dokumente), die von installierten Erweiterungen gespeichert sind. | |
Graphidentität & | vso.graph |
Graph (lesen) | Ermöglicht das Lesen von Benutzer-, Gruppen-, Bereichs- und Gruppenmitgliedschaftsinformationen. |
vso.graph_manage |
Graph (verwalten) | Gewährt die Möglichkeit, Benutzer-, Gruppen-, Bereichs- und Gruppenmitgliedschaftsinformationen zu lesen sowie Benutzer, Gruppen hinzuzufügen und Gruppenmitgliedschaften zu verwalten. | |
vso.identity |
Identität (Lesen) | Gewährt die Möglichkeit, Identitäten und Gruppen zu lesen. | |
vso.identity_manage |
Identität (Verwalten) | Ermöglicht das Lesen, Schreiben und Verwalten von Identitäten und Gruppen. | |
Auslastungstest | vso.loadtest |
Auslastungstest (Lesen) | Gewährt die Möglichkeit, Ihre Auslastungstestausführungen, Testergebnisse und APM-Artefakte zu lesen. |
vso.loadtest_write |
Auslastungstest (Lese- und Schreibzugriff) | Ermöglicht das Erstellen und Aktualisieren von Auslastungstestausführungen sowie das Lesen von Metadaten, einschließlich Testergebnissen und APM-Artefakten. | |
Computergruppe | vso.machinegroup_manage |
Bereitstellungsgruppe (lesen, verwalten) | Bietet die Möglichkeit, Bereitstellungsgruppen und Agentpools zu verwalten. |
Marketplace | vso.gallery |
Marketplace | Gewährt Lesezugriff auf öffentliche und private Elemente und Herausgeber. |
vso.gallery_acquire |
Marketplace (erwerben) | Gewährt Lesezugriff und die Möglichkeit, Elemente zu erwerben. | |
vso.gallery_publish |
Marketplace (veröffentlichen) | Gewährt Lesezugriff und die Möglichkeit zum Hochladen, Aktualisieren und Freigeben von Elementen. | |
vso.gallery_manage |
Marketplace (verwalten) | Gewährt Lesezugriff und die Möglichkeit, Elemente und Herausgeber zu veröffentlichen und zu verwalten. | |
Benachrichtigungen | vso.notification |
Benachrichtigungen (lesen) | Bietet Lesezugriff auf Abonnements und Ereignismetadaten, einschließlich filterbarer Feldwerte. |
vso.notification_write |
Benachrichtigungen (Schreiben) | Bietet Lese- und Schreibzugriff auf Abonnements und Lesezugriff auf Ereignismetadaten, einschließlich filterbarer Feldwerte. | |
vso.notification_manage |
Benachrichtigungen (verwalten) | Bietet Lese-, Schreib- und Verwaltungszugriff auf Abonnements und Lesezugriff auf Ereignismetadaten, einschließlich filterbarer Feldwerte. | |
vso.notification_diagnostics |
Benachrichtigungen (Diagnose) | Bietet Zugriff auf benachrichtigungsbezogene Diagnoseprotokolle und die Möglichkeit, Diagnose für einzelne Abonnements zu aktivieren. | |
Verpackung | vso.packaging |
Verpackung (lesen) | Gewährt die Möglichkeit, Feeds und Pakete zu lesen. |
vso.packaging_write |
Packen (Lesen und Schreiben) | Gewährt die Möglichkeit, Feeds und Pakete zu erstellen und zu lesen. | |
vso.packaging_manage |
Verpacken (Lesen, Schreiben und Verwalten) | Gewährt die Möglichkeit, Feeds und Pakete zu erstellen, zu lesen, zu aktualisieren und zu löschen. | |
Pipelineressourcen | vso.pipelineresources_use |
Pipelineressourcen (Verwendung) | Gewährt die Möglichkeit, die Anforderung einer Pipeline zur Verwendung einer geschützten Ressource zu genehmigen: Agentpool, Umgebung, Warteschlange, Repository, sichere Dateien, Dienstverbindung und Variablengruppe. |
vso.pipelineresources_manage |
Pipelineressourcen (Verwenden und Verwalten) | Gewährt die Möglichkeit, eine geschützte Ressource oder die Anforderung einer Pipeline zur Verwendung einer geschützten Ressource zu verwalten: Agentpool, Umgebung, Warteschlange, Repository, sichere Dateien, Dienstverbindung und Variablengruppe. | |
Projekt und Team | vso.project |
Projekt und Team (Lesen) | Gewährt die Möglichkeit, Projekte und Teams zu lesen. |
vso.project_write |
Projekt und Team (Lesen und Schreiben) | Gewährt die Möglichkeit, Projekte und Teams zu lesen und zu aktualisieren. | |
vso.project_manage |
Projekt und Team (Lesen, Schreiben und Verwalten) | Gewährt die Möglichkeit, Projekte und Teams zu erstellen, zu lesen, zu aktualisieren und zu löschen. | |
Release | vso.release |
Release (lesen) | Ermöglicht das Lesen von Releaseartefakten, einschließlich Releases, Releasedefinitionen und Releaseumgebung. |
vso.release_execute |
Release (Lesen, Schreiben und Ausführen) | Ermöglicht das Lesen und Aktualisieren von Releaseartefakten, einschließlich Releases, Releasedefinitionen und Releaseumgebung, sowie die Möglichkeit, eine neue Version in die Warteschlange zu stellen. | |
vso.release_manage |
Release (Lesen, Schreiben, Ausführen und Verwalten) | Ermöglicht das Lesen, Aktualisieren und Löschen von Releaseartefakten, einschließlich Releases, Releasedefinitionen und Releaseumgebung sowie die Möglichkeit, eine neue Version in die Warteschlange zu stellen und zu genehmigen. | |
Sichern von Dateien | vso.securefiles_read |
Sichere Dateien (lesen) | Gewährt die Möglichkeit, sichere Dateien zu lesen. |
vso.securefiles_write |
Sichere Dateien (lesen, erstellen) | Gewährt die Möglichkeit, sichere Dateien zu lesen und zu erstellen. | |
vso.securefiles_manage |
Sichern von Dateien (Lesen, Erstellen und Verwalten) | Gewährt die Möglichkeit, sichere Dateien zu lesen, zu erstellen und zu verwalten. | |
Sicherheit | vso.security_manage |
Sicherheit (Verwalten) | Gewährt die Möglichkeit zum Lesen, Schreiben und Verwalten von Sicherheitsberechtigungen. |
Verwenden einer Dienstverbindung | vso.serviceendpoint |
Dienstendpunkte (lesen) | Gewährt die Möglichkeit, Dienstendpunkte zu lesen. |
vso.serviceendpoint_query |
Dienstendpunkte (Lesen und Abfragen) | Gewährt die Möglichkeit, Dienstendpunkte zu lesen und abzufragen. | |
vso.serviceendpoint_manage |
Dienstendpunkte (Lesen, Abfragen und Verwalten) | Ermöglicht das Lesen, Abfragen und Verwalten von Dienstendpunkten. | |
Einstellungen | vso.settings |
Einstellungen (lesen) | Gewährt die Möglichkeit, Einstellungen zu lesen. |
vso.settings_write |
Einstellungen (Lese- und Schreibzugriff) | Gewährt die Möglichkeit, Einstellungen zu erstellen und zu lesen. | |
Symbols | vso.symbols |
Symbole (lesen) | Gewährt die Möglichkeit, Symbole zu lesen. |
vso.symbols_write |
Symbole (Lesen und Schreiben) | Gewährt die Möglichkeit, Symbole zu lesen und zu schreiben. | |
vso.symbols_manage |
Symbole (Lesen, Schreiben und Verwalten) | Gewährt die Möglichkeit, Symbole zu lesen, zu schreiben und zu verwalten. | |
Aufgabengruppen | vso.taskgroups_read |
Aufgabengruppen (lesen) | Gewährt die Möglichkeit, Aufgabengruppen zu lesen. |
vso.taskgroups_write |
Aufgabengruppen (lesen, erstellen) | Gewährt die Möglichkeit, Aufgabengruppen zu lesen und zu erstellen. | |
vso.taskgroups_manage |
Aufgabengruppen (Lesen, Erstellen und Verwalten) | Gewährt die Möglichkeit, Taskgruppen zu lesen, zu erstellen und zu verwalten. | |
Teamdashboard | vso.dashboards |
Teamdashboards (lesen) | Gewährt die Möglichkeit, Team- Dashboard Informationen zu lesen. |
vso.dashboards_manage |
Teamdashboards (verwalten) | Gewährt die Möglichkeit, Team-Dashboard Informationen zu verwalten. | |
Testverwaltung | vso.test |
Testverwaltung (lesen) | Ermöglicht das Lesen von Testplänen, Fällen, Ergebnissen und anderen Artefakten im Zusammenhang mit der Testverwaltung. |
vso.test_write |
Testverwaltung (Lese- und Schreibzugriff) | Ermöglicht das Lesen, Erstellen und Aktualisieren von Testplänen, Fällen, Ergebnissen und anderen Artefakten im Zusammenhang mit der Testverwaltung. | |
Threads | vso.threads_full |
PR-Threads | Gewährt die Möglichkeit zum Lesen und Schreiben von Pull Request-Kommentarthreads. |
Token | vso.tokens |
Delegierte Autorisierungstoken | Gewährt Benutzern die Möglichkeit, delegierte Autorisierungstoken zu verwalten. |
vso.tokenadministration |
Tokenverwaltung | Gewährt organization Administratoren die Möglichkeit, vorhandene Token zu verwalten (anzuzeigen und zu widerrufen). | |
Benutzerprofil | vso.profile |
Benutzerprofil (Lesen) | Gewährt die Möglichkeit, Ihr Profil, Ihre Konten, Sammlungen, Projekte, Teams und andere Organisationsartefakte auf oberster Ebene zu lesen. |
vso.profile_write |
Benutzerprofil (Schreiben) | Gewährt die Möglichkeit, in Ihr Profil zu schreiben. | |
Variablengruppen | vso.variablegroups_read |
Variablengruppen (lesen) | Gewährt die Möglichkeit, Variablengruppen zu lesen. |
vso.variablegroups_write |
Variablengruppen (lesen, erstellen) | Gewährt die Möglichkeit, Variablengruppen zu lesen und zu erstellen. | |
vso.variablegroups_manage |
Variablengruppen (Lesen, Erstellen und Verwalten) | Gewährt die Möglichkeit, Variablengruppen zu lesen, zu erstellen und zu verwalten. | |
Wiki | vso.wiki |
Wiki (lesen) | Ermöglicht das Lesen von Wikis, Wiki-Seiten und Wiki-Anlagen. Gewährt auch die Möglichkeit, Wiki-Seiten zu durchsuchen. |
vso.wiki_write |
Wiki (Lesen und Schreiben) | Gewährt die Möglichkeit, Wikis, Wiki-Seiten und Wiki-Anlagen zu lesen, zu erstellen und zu aktualisieren. | |
Arbeitselemente | vso.work |
Arbeitselemente (Lesen) | Ermöglicht das Lesen von Arbeitselementen, Abfragen, Boards, Bereichs- und Iterationspfaden und anderen Metadaten zur Nachverfolgung von Arbeitselementen. Außerdem können Sie Abfragen ausführen, Arbeitselemente durchsuchen und Benachrichtigungen über Arbeitselementereignisse über Diensthaken empfangen. |
vso.work_write |
Arbeitselemente (Lese- und Schreibzugriff) | Ermöglicht das Lesen, Erstellen und Aktualisieren von Arbeitselementen und Abfragen, Aktualisieren von Boardmetadaten, Lesebereichs- und Iterationspfaden für andere Metadaten zur Nachverfolgung von Arbeitselementen, Ausführen von Abfragen und das Empfangen von Benachrichtigungen über Arbeitselementereignisse über Diensthaken. | |
vso.work_full |
Arbeitselemente (Lesen, Schreiben und Verwalten) | Gewährt vollzugriff auf Arbeitselemente, Abfragen, Backlogs, Pläne und Metadaten zur Nachverfolgung von Arbeitselementen, einschließlich Importen von Prozessvorlagen. Bietet auch die Möglichkeit, Benachrichtigungen über Arbeitselementereignisse über Diensthaken zu erhalten. |
Registrieren Sie Ihre App, und verwenden Sie Bereiche, um anzugeben, welche Berechtigungen in Azure DevOps Services, die Ihre App benötigt. Wenn Ihre Benutzer Ihre App für den Zugriff auf ihre organization autorisieren, autorisieren sie sie für diese Bereiche. Das Anfordern der Autorisierung durchläuft dieselben Bereiche, die Sie registriert haben.
Weitere Informationen finden Sie unter Erstellen der Nachverfolgung/Anlagen von Arbeitselementen.
Beispiele
Sie finden ein C#-Beispiel, das OAuth zum Aufrufen Azure DevOps Services REST-APIs implementiert, in unserem C# OAuth GitHub-Beispiel.
Häufig gestellte Fragen (FAQs)
F: Kann ich OAuth mit meiner Handy-App verwenden?
A: Nein. Azure DevOps Services unterstützt nur den Webserverfluss, sodass es keine Möglichkeit gibt, OAuth zu implementieren, da Sie das App-Geheimnis nicht sicher speichern können.
F: Welche Fehler oder besonderen Bedingungen muss ich in meinem Code behandeln?
A: Stellen Sie sicher, dass Sie die folgenden Bedingungen behandeln:
- Wenn Ihr Benutzer Ihrem App-Zugriff verweigert, wird kein Autorisierungscode zurückgegeben. Verwenden Sie den Autorisierungscode nicht, ohne auf Denial zu überprüfen.
- Wenn Ihr Benutzer die Autorisierung Ihrer App widerruft, ist das Zugriffstoken nicht mehr gültig. Wenn Ihre App das Token für den Zugriff auf Daten verwendet, wird ein Fehler 401 zurückgegeben. Fordern Sie die Autorisierung erneut an.
F: Ich möchte meine Web-App lokal debuggen. Kann ich localhost für die Rückruf-URL verwenden, wenn ich meine App registriert habe?
A: Ja. Azure DevOps Services lässt jetzt localhost in Ihrer Rückruf-URL zu. Stellen Sie sicher, dass Sie die Rückruf-URL als Anfang verwenden https://localhost
, wenn Sie Ihre App registrieren.
F: Ich erhalte einen HTTP 400-Fehler, wenn ich versuche, ein Zugriffstoken abzurufen. Was könnte falsch sein?
A: Überprüfen Sie, ob Sie den Inhaltstyp in Ihrem Anforderungsheader auf application/x-www-form-urlencoded festlegen.
F: Ich erhalte einen HTTP 401-Fehler, wenn ich ein OAuth-basiertes Zugriffstoken verwende, aber ein PAT mit demselben Bereich funktioniert einwandfrei. Warum?
A: Vergewissern Sie sich, dass der Anwendungszugriff von Drittanbietern über OAuth nicht vom Administrator Ihres organization unter https://dev.azure.com/{your-org-name}/_settings/organizationPolicy
deaktiviert wurde.
In diesem Szenario funktioniert der Flow zum Autorisieren einer App und generieren eines Zugriffstokens, aber alle REST-APIs geben nur einen Fehler zurück, z. B. TF400813: The user "<GUID>" is not authorized to access this resource.
F: Kann ich OAuth mit den SOAP-Endpunkten und REST-APIs verwenden?
A: Nein. OAuth wird derzeit nur in den REST-APIs unterstützt.
F: Wie kann ich mit Azure DevOps-REST-APIs Anlagendetails für mein Arbeitselement abrufen?
A: Rufen Sie zunächst die Arbeitselementdetails mit Arbeitselementen ab: Abrufen der REST-API für Arbeitselemente :
GET https://dev.azure.com/{organization}/{project}/_apis/wit/workitems/{id}
Um die Anlagendetails abzurufen, müssen Sie der URL den folgenden Parameter hinzufügen:
$expand=all
Mit den Ergebnissen erhalten Sie die Relations-Eigenschaft. Dort finden Sie die Anlagen-URL, und in der URL finden Sie die ID. Zum Beispiel:
$url = https://dev.azure.com/{organization}/{project}/_apis/wit/workitems/434?$expand=all&api-version=5.0
$workItem = Invoke-RestMethod -Uri $url -Method Get -ContentType application/json
$split = ($workitem.relations.url).Split('/')
$attachmentId = $split[$split.count - 1]
# Result: 1244nhsfs-ff3f-25gg-j64t-fahs23vfs