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.

Prozess zum Abrufen der Autorisierung.

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

  1. Wechseln Sie zu https://app.vsaex.visualstudio.com/app/register , um Ihre App zu registrieren.

  2. 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.

  3. Wählen Sie Anwendung erstellen aus.

    Die Seite mit den Anwendungseinstellungen wird angezeigt.

    Screenshot: Anwendungseinstellungen für Ihre App

    • 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.

      Screenshot: Autorisierungsseite für Visual Studio Codespaces mit Unternehmens- und App-Informationen

    • 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.

  4. 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/viewverfügbar.

2. Autorisieren Ihrer App

  1. 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.
  1. 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/organizationPolicydeaktiviert 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