Service-naar-service-aanroepen die gebruikmaken van gedelegeerde gebruikersidentiteit in de On-Behalf-Of-stroom
Waarschuwing
Deze inhoud is voor het oudere Azure AD v1.0-eindpunt. Gebruik het Microsoft Identity Platform voor nieuwe projecten.
De OAuth 2.0 On-Behalf-Of (OBO)-stroom maakt een toepassing die een service of web-API aanroept om gebruikersverificatie door te geven aan een andere service of web-API. De OBO-stroom geeft de gedelegeerde gebruikersidentiteit en machtigingen door via de aanvraagketen. Om de service in de middelste laag geverifieerde aanvragen te laten uitvoeren naar de downstreamservice, moet deze namens de gebruiker een toegangstoken beveiligen vanuit Azure Active Directory (Azure AD).
Belangrijk
Vanaf mei 2018 kan een id_token
stroom niet worden gebruikt voor de On-Behalf-Of-stroom. Apps met één pagina (SPA's) moeten een toegangstoken doorgeven aan een vertrouwelijke client in de middelste laag om OBO-stromen uit te voeren. Zie beperkingen voor meer informatie over de clients die On-Behalf-Of-gesprekken kunnen uitvoeren.
On-Behalf-Of-stroomdiagram
De OBO-stroom wordt gestart nadat de gebruiker is geverifieerd op een toepassing die gebruikmaakt van de toestemmingsstroom OAuth 2.0-autorisatiecode. Op dat moment verzendt de toepassing een toegangstoken (token A) naar de web-API (API A) van de middelste laag met de claims van de gebruiker en toestemming voor toegang tot API A. API A maakt vervolgens een geverifieerde aanvraag voor de downstream web-API (API B).
Deze stappen vormen de On-Behalf-Of-stroom:
- De clienttoepassing doet een aanvraag naar API A met het token A.
- API A wordt geverifieerd bij het Azure AD tokenuitgifte-eindpunt en vraagt een token aan om toegang te krijgen tot API B.
- Het Azure AD eindpunt voor tokenuitgifte valideert API A-referenties met token A en geeft het toegangstoken voor API B (token B) uit.
- De aanvraag voor API B bevat token B in de autorisatieheader.
- API B retourneert gegevens van de beveiligde resource.
Notitie
De claim van de doelgroep in een toegangstoken dat wordt gebruikt om een token aan te vragen voor een downstreamservice moet de id zijn van de service die de OBO-aanvraag indient. Het token moet ook zijn ondertekend met de algemene ondertekeningssleutel van Azure Active Directory (dit is de standaardinstelling voor toepassingen die zijn geregistreerd via App-registraties in de portal).
De toepassing en service registreren in Azure AD
Registreer zowel de middelste service als de clienttoepassing in Azure AD.
De service voor de middelste laag registreren
- Meld u aan bij de Azure-portal.
- Selecteer uw account in de bovenste balk en kijk onder Directory om de Microsoft Active Directory-tenant te kiezen waarin u uw toepassing wilt registreren.
- Selecteer Meer services in het linkerdeelvenster en kies Azure Active Directory.
- Selecteer App-registraties en selecteer vervolgens Nieuwe registratie.
- Voer een beschrijvende naam in voor de toepassing en selecteer het toepassingstype.
- Selecteer onder Ondersteunde accounttypen de optie Accounts in een organisatieadreslijst en persoonlijke Microsoft-account.
- Stel de omleidings-URI in op de basis-URL.
- Selecteer Registreren om de toepassing te maken.
- Kies in de Azure Portal uw toepassing en selecteer Certificaten & geheimen.
- Selecteer Nieuw clientgeheim en voeg een geheim toe met een duur van één jaar of twee jaar.
- Wanneer u deze pagina opslaat, geeft de Azure Portal de geheime waarde weer. Kopieer de waarde en sla deze op in een veilige locatie.
- Maak een bereik voor uw toepassing op de pagina Een API beschikbaar maken voor uw app en klik op 'Een bereik toevoegen'. Voor de portal moet u mogelijk ook een toepassings-id-URI maken.
Belangrijk
U hebt het geheim nodig om de toepassingsinstellingen in uw implementatie te configureren. Deze geheime waarde wordt niet opnieuw weergegeven en kan niet op andere manieren worden opgehaald. Noteer deze zodra deze zichtbaar is in de Azure Portal.
De clienttoepassing registreren
- Meld u aan bij de Azure-portal.
- Selecteer uw account in de bovenste balk en kijk onder Directory om de Microsoft Active Directory-tenant te kiezen waarin u uw toepassing wilt registreren.
- Selecteer Meer services in het linkerdeelvenster en kies Azure Active Directory.
- Selecteer App-registraties en selecteer vervolgens Nieuwe registratie.
- Voer een beschrijvende naam in voor de toepassing en selecteer het toepassingstype.
- Selecteer onder Ondersteunde accounttypen de optie Accounts in een organisatieadreslijst en persoonlijke Microsoft-account.
- Stel de omleidings-URI in op de basis-URL.
- Selecteer Registreren om de toepassing te maken.
- Machtigingen voor uw toepassing configureren. Selecteer een Machtiging toevoegen in API-machtigingen en vervolgens Mijn API's.
- Typ de naam van de service op de middelste laag in het tekstveld.
- Kies Machtigingen selecteren en selecteer vervolgens het bereik dat u in de laatste stap van het registreren van de middelste laag hebt gemaakt.
Bekende clienttoepassing configureren
In dit scenario moet de service op de middelste laag toestemming van de gebruiker krijgen voor toegang tot de downstream-API zonder tussenkomst van de gebruiker. De optie voor het verlenen van toegang tot de downstream-API moet vooraf worden weergegeven als onderdeel van de toestemmingsstap tijdens de verificatie.
Volg de onderstaande stappen om de registratie van de clienttoepassing expliciet te binden in Azure AD met de registratie van de service in de middelste laag. Met deze bewerking wordt de toestemming die is vereist voor zowel de client als de middelste laag samengevoegd in één dialoogvenster.
- Ga naar de registratie van de service in de middelste laag en selecteer Manifest om de manifesteditor te openen.
- Zoek de
knownClientApplications
matrixeigenschap en voeg de client-id van de clienttoepassing toe als element. - Sla het manifest op door Opslaan te selecteren.
Service-naar-service-toegangstoken-aanvraag
Als u een toegangstoken wilt aanvragen, maakt u een HTTP POST naar het tenantspecifieke Azure AD-eindpunt met de volgende parameters:
https://login.microsoftonline.com/<tenant>/oauth2/token
De clienttoepassing wordt beveiligd door een gedeeld geheim of door een certificaat.
Eerste geval: aanvraag voor toegangstoken met een gedeeld geheim
Wanneer u een gedeeld geheim gebruikt, bevat een service-naar-service-toegangstoken-aanvraag de volgende parameters:
Parameter | Type | Description |
---|---|---|
grant_type | vereist | Het type tokenaanvraag. Een OBO-aanvraag maakt gebruik van een JSON Web Token (JWT), zodat de waarde urn:ietf:params:oauth:grant-type:jwt-bearer moet zijn. |
assertie | vereist | De waarde van het toegangstoken dat in de aanvraag wordt gebruikt. |
client_id | vereist | De app-id die is toegewezen aan de aanroepende service tijdens de registratie met Azure AD. Als u de app-id in de Azure Portal wilt zoeken, selecteert u Active Directory, kiest u de map en selecteert u vervolgens de naam van de toepassing. |
client_secret | vereist | De sleutel die is geregistreerd voor de aanroepende service in Azure AD. Deze waarde moet op het moment van registratie zijn genoteerd. |
resource | vereist | De app-id-URI van de ontvangende service (beveiligde resource). Als u de app-id-URI in de Azure Portal wilt zoeken, selecteert u Active Directory en kiest u de map. Selecteer de naam van de toepassing, kies Alle instellingen en selecteer vervolgens Eigenschappen. |
requested_token_use | vereist | Hiermee geeft u aan hoe de aanvraag moet worden verwerkt. In de On-Behalf-Of-stroom moet de waarde on_behalf_of worden. |
scope | vereist | Een door spaties gescheiden lijst met bereiken voor de tokenaanvraag. Voor OpenID Connect moet de openid van het bereik worden opgegeven. |
Voorbeeld
De volgende HTTP POST vraagt een toegangstoken aan voor de https://graph.microsoft.com web-API. Hiermee client_id
wordt de service geïdentificeerd die het toegangstoken aanvraagt.
// line breaks for legibility only
POST /oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
&client_id=625391af-c675-43e5-8e44-edd3e30ceb15
&client_secret=0Y1W%2BY3yYb3d9N8vSjvm8WrGzVZaAaHbHHcGbcgG%2BoI%3D
&resource=https%3A%2F%2Fgraph.microsoft.com
&assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCIsImtpZCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCJ9.ewogICJhdWQiOiAiaHR0cHM6Ly9ncmFwaC5taWNyb3NvZnQuY29tIiwKICAiaXNzIjogImh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzI2MDM5Y2NlLTQ4OWQtNDAwMi04MjkzLTViMGM1MTM0ZWFjYi8iLAogICJpYXQiOiAxNDkzNDIzMTY4LAogICJuYmYiOiAxNDkzNDIzMTY4LAogICJleHAiOiAxNDkzNDY2OTUxLAogICJhY3IiOiAiMSIsCiAgImFpbyI6ICJBU1FBMi84REFBQUE1NnZGVmp0WlNjNWdBVWwrY1Z0VFpyM0VvV2NvZEoveWV1S2ZqcTZRdC9NPSIsCiAgImFtciI6IFsKICAgICJwd2QiCiAgXSwKICAiYXBwaWQiOiAiNjI1MzkxYWYtYzY3NS00M2U1LThlNDQtZWRkM2UzMGNlYjE1IiwKICAiYXBwaWRhY3IiOiAiMSIsCiAgImVfZXhwIjogMzAyNjgzLAogICJmYW1pbHlfbmFtZSI6ICJUZXN0IiwKICAiZ2l2ZW5fbmFtZSI6ICJOYXZ5YSIsCiAgImlwYWRkciI6ICIxNjcuMjIwLjEuMTc3IiwKICAibmFtZSI6ICJOYXZ5YSBUZXN0IiwKICAib2lkIjogIjFjZDRiY2FjLWI4MDgtNDIzYS05ZTJmLTgyN2ZiYjFiYjczOSIsCiAgInBsYXRmIjogIjMiLAogICJwdWlkIjogIjEwMDMzRkZGQTEyRUQ3RkUiLAogICJzY3AiOiAiVXNlci5SZWFkIiwKICAic3ViIjogIjNKTUlaSWJlYTc1R2hfWHdDN2ZzX0JDc3kxa1l1ekZKLTUyVm1Zd0JuM3ciLAogICJ0aWQiOiAiMjYwMzljY2UtNDg5ZC00MDAyLTgyOTMtNWIwYzUxMzRlYWNiIiwKICAidW5pcXVlX25hbWUiOiAibmF2eWFAZGRvYmFsaWFub3V0bG9vay5vbm1pY3Jvc29mdC5jb20iLAogICJ1cG4iOiAibmF2eWFAZGRvYmFsaWFub3V0bG9vay5vbm1pY3Jvc29mdC5jb20iLAogICJ1dGkiOiAieEN3ZnpoYS1QMFdKUU9MeENHZ0tBQSIsCiAgInZlciI6ICIxLjAiCn0.cqmUVjfVbqWsxJLUI1Z4FRx1mNQAHP-L0F4EMN09r8FY9bIKeO-0q1eTdP11Nkj_k4BmtaZsTcK_mUygdMqEp9AfyVyA1HYvokcgGCW_Z6DMlVGqlIU4ssEkL9abgl1REHElPhpwBFFBBenOk9iHddD1GddTn6vJbKC3qAaNM5VarjSPu50bVvCrqKNvFixTb5bbdnSz-Qr6n6ACiEimiI1aNOPR2DeKUyWBPaQcU5EAK0ef5IsVJC1yaYDlAcUYIILMDLCD9ebjsy0t9pj_7lvjzUSrbMdSCCdzCqez_MSNxrk1Nu9AecugkBYp3UVUZOIyythVrj6-sVvLZKUutQ
&requested_token_use=on_behalf_of
&scope=openid
Tweede geval: aanvraag van toegangstoken met een certificaat
Een service-naar-service-toegangstoken-aanvraag met een certificaat bevat de volgende parameters:
Parameter | Type | Description |
---|---|---|
grant_type | vereist | Het type tokenaanvraag. Een OBO-aanvraag maakt gebruik van een JSON Web Token (JWT), zodat de waarde urn:ietf:params:oauth:grant-type:jwt-bearer moet zijn. |
assertie | vereist | De waarde van het token dat in de aanvraag wordt gebruikt. |
client_id | vereist | De app-id die is toegewezen aan de aanroepende service tijdens de registratie met Azure AD. Als u de app-id in de Azure Portal wilt zoeken, selecteert u Active Directory, kiest u de map en selecteert u vervolgens de naam van de toepassing. |
client_assertion_type | vereist | De waarde moet urn:ietf:params:oauth:client-assertion-type:jwt-bearer zijn |
client_assertion | vereist | Een JSON-webtoken die u maakt en ondertekent met het certificaat dat u hebt geregistreerd als referenties voor uw toepassing. Zie certificaatreferenties voor meer informatie over de assertie-indeling en over het registreren van uw certificaat. |
resource | vereist | De app-id-URI van de ontvangende service (beveiligde resource). Als u de app-id-URI in de Azure Portal wilt zoeken, selecteert u Active Directory en kiest u de map. Selecteer de naam van de toepassing, kies Alle instellingen en selecteer vervolgens Eigenschappen. |
requested_token_use | vereist | Hiermee geeft u aan hoe de aanvraag moet worden verwerkt. In de On-Behalf-Of-stroom moet de waarde on_behalf_of worden. |
scope | vereist | Een door spaties gescheiden lijst met bereiken voor de tokenaanvraag. Voor OpenID Connect moet de openid van het bereik worden opgegeven. |
Deze parameters zijn bijna hetzelfde als met de aanvraag door een gedeeld geheim, behalve dat de client_secret parameter
wordt vervangen door twee parameters: client_assertion_type
en client_assertion
.
Voorbeeld
De volgende HTTP POST vraagt een toegangstoken aan voor de https://graph.microsoft.com web-API met een certificaat. Hiermee client_id
wordt de service geïdentificeerd die het toegangstoken aanvraagt.
// line breaks for legibility only
POST /oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
&client_id=625391af-c675-43e5-8e44-edd3e30ceb15
&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=eyJhbGciOiJSUzI1NiIsIng1dCI6Imd4OHRHeXN5amNScUtqRlBuZDdSRnd2d1pJMCJ9.eyJ{a lot of characters here}M8U3bSUKKJDEg
&resource=https%3A%2F%2Fgraph.microsoft.com
&assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCIsImtpZCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCJ9.eyJhdWQiOiJodHRwczovL2Rkb2JhbGlhbm91dGxvb2sub25taWNyb3NvZnQuY29tLzE5MjNmODYyLWU2ZGMtNDFhMy04MWRhLTgwMmJhZTAwYWY2ZCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzI2MDM5Y2NlLTQ4OWQtNDAwMi04MjkzLTViMGM1MTM0ZWFjYi8iLCJpYXQiOjE0OTM0MjMxNTIsIm5iZiI6MTQ5MzQyMzE1MiwiZXhwIjoxNDkzNDY2NjUyLCJhY3IiOiIxIiwiYWlvIjoiWTJaZ1lCRFF2aTlVZEc0LzM0L3dpQndqbjhYeVp4YmR1TFhmVE1QeG8yYlN2elgreHBVQSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiJiMzE1MDA3OS03YmViLTQxN2YtYTA2YS0zZmRjNzhjMzI1NDUiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MzAyNDAwLCJmYW1pbHlfbmFtZSI6IlRlc3QiLCJnaXZlbl9uYW1lIjoiTmF2eWEiLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTc3IiwibmFtZSI6Ik5hdnlhIFRlc3QiLCJvaWQiOiIxY2Q0YmNhYy1iODA4LTQyM2EtOWUyZi04MjdmYmIxYmI3MzkiLCJwbGF0ZiI6IjMiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJEVXpYbkdKMDJIUk0zRW5pbDFxdjZCakxTNUllQy0tQ2ZpbzRxS1MzNEc4IiwidGlkIjoiMjYwMzljY2UtNDg5ZC00MDAyLTgyOTMtNWIwYzUxMzRlYWNiIiwidW5pcXVlX25hbWUiOiJuYXZ5YUBkZG9iYWxpYW5vdXRsb29rLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6Im5hdnlhQGRkb2JhbGlhbm91dGxvb2sub25taWNyb3NvZnQuY29tIiwidmVyIjoiMS4wIn0.R-Ke-XO7lK0r5uLwxB8g5CrcPAwRln5SccJCfEjU6IUqpqcjWcDzeDdNOySiVPDU_ZU5knJmzRCF8fcjFtPsaA4R7vdIEbDuOur15FXSvE8FvVSjP_49OH6hBYqoSUAslN3FMfbO6Z8YfCIY4tSOB2I6ahQ_x4ZWFWglC3w5mK-_4iX81bqi95eV4RUKefUuHhQDXtWhrSgIEC0YiluMvA4TnaJdLq_tWXIc4_Tq_KfpkvI004ONKgU7EAMEr1wZ4aDcJV2yf22gQ1sCSig6EGSTmmzDuEPsYiyd4NhidRZJP4HiiQh-hePBQsgcSgYGvz9wC6n57ufYKh2wm_Ti3Q
&requested_token_use=on_behalf_of
&scope=openid
Service-naar-service-toegangstoken-antwoord
Een geslaagd antwoord is een JSON OAuth 2.0-antwoord met de volgende parameters:
Parameter | Beschrijving |
---|---|
token_type | Geeft de waarde van het tokentype aan. Het enige type dat Azure AD ondersteunt, is Bearer. Zie OAuth2.2.0 Authorization Framework: Bearer Tokens Usage (RFC 6750) (OAuth2.0 Authorization Framework: Bearer-tokengebruik (RFC 6750)) voor meer informatie over bearer-tokens. |
scope | Het toegangsbereik dat in het token wordt verleend. |
expires_in | De tijdsduur van het toegangstoken is geldig (in seconden). |
expires_on | De tijd waarop het token verloopt. De datum wordt weergegeven als het aantal seconden van 1970-01-01T0:0:0Z UTC tot de vervaltijd. Deze waarde wordt gebruikt om de levensduur van tokens in de cache te bepalen. |
resource | De app-id-URI van de ontvangende service (beveiligde resource). |
access_token | Het aangevraagde toegangstoken. De aanroepende service kan dit token gebruiken om te verifiëren bij de ontvangende service. |
id_token | Het aangevraagde id-token. De aanroepende service kan het id-token gebruiken om de identiteit van de gebruiker te controleren en een sessie met de gebruiker te starten. |
refresh_token | Het vernieuwingstoken voor het aangevraagde toegangstoken. De aanroepende service kan dit token gebruiken om een ander toegangstoken aan te vragen nadat het huidige toegangstoken is verlopen. |
Voorbeeld van geslaagd antwoord
In het volgende voorbeeld ziet u een geslaagd antwoord op een aanvraag voor een toegangstoken voor de https://graph.microsoft.com web-API.
{
"token_type":"Bearer",
"scope":"User.Read",
"expires_in":"43482",
"ext_expires_in":"302683",
"expires_on":"1493466951",
"not_before":"1493423168",
"resource":"https://graph.microsoft.com",
"access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCIsImtpZCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCJ9.eyJhdWQiOiJodHRwczovL2dyYXBoLndpbmRvd3MubmV0IiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvMjYwMzljY2UtNDg5ZC00MDAyLTgyOTMtNWIwYzUxMzRlYWNiLyIsImlhdCI6MTQ5MzQyMzE2OCwibmJmIjoxNDkzNDIzMTY4LCJleHAiOjE0OTM0NjY5NTEsImFjciI6IjEiLCJhaW8iOiJBU1FBMi84REFBQUE1NnZGVmp0WlNjNWdBVWwrY1Z0VFpyM0VvV2NvZEoveWV1S2ZqcTZRdC9NPSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiI2MjUzOTFhZi1jNjc1LTQzZTUtOGU0NC1lZGQzZTMwY2ViMTUiLCJhcHBpZGFjciI6IjEiLCJlX2V4cCI6MzAyNjgzLCJmYW1pbHlfbmFtZSI6IlRlc3QiLCJnaXZlbl9uYW1lIjoiTmF2eWEiLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTc3IiwibmFtZSI6Ik5hdnlhIFRlc3QiLCJvaWQiOiIxY2Q0YmNhYy1iODA4LTQyM2EtOWUyZi04MjdmYmIxYmI3MzkiLCJwbGF0ZiI6IjMiLCJwdWlkIjoiMTAwMzNGRkZBMTJFRDdGRSIsInNjcCI6IlVzZXIuUmVhZCIsInN1YiI6IjNKTUlaSWJlYTc1R2hfWHdDN2ZzX0JDc3kxa1l1ekZKLTUyVm1Zd0JuM3ciLCJ0aWQiOiIyNjAzOWNjZS00ODlkLTQwMDItODI5My01YjBjNTEzNGVhY2IiLCJ1bmlxdWVfbmFtZSI6Im5hdnlhQGRkb2JhbGlhbm91dGxvb2sub25taWNyb3NvZnQuY29tIiwidXBuIjoibmF2eWFAZGRvYmFsaWFub3V0bG9vay5vbm1pY3Jvc29mdC5jb20iLCJ1dGkiOiJ4Q3dmemhhLVAwV0pRT0x4Q0dnS0FBIiwidmVyIjoiMS4wIn0.cqmUVjfVbqWsxJLUI1Z4FRx1mNQAHP-L0F4EMN09r8FY9bIKeO-0q1eTdP11Nkj_k4BmtaZsTcK_mUygdMqEp9AfyVyA1HYvokcgGCW_Z6DMlVGqlIU4ssEkL9abgl1REHElPhpwBFFBBenOk9iHddD1GddTn6vJbKC3qAaNM5VarjSPu50bVvCrqKNvFixTb5bbdnSz-Qr6n6ACiEimiI1aNOPR2DeKUyWBPaQcU5EAK0ef5IsVJC1yaYDlAcUYIILMDLCD9ebjsy0t9pj_7lvjzUSrbMdSCCdzCqez_MSNxrk1Nu9AecugkBYp3UVUZOIyythVrj6-sVvLZKUutQ",
"refresh_token":"AQABAAAAAABnfiG-mA6NTae7CdWW7QfdjKGu9-t1scy_TDEmLi4eLQMjJGt_nAoVu6A4oSu1KsRiz8XyQIPKQxSGfbf2FoSK-hm2K8TYzbJuswYusQpJaHUQnSqEvdaCeFuqXHBv84wjFhuanzF9dQZB_Ng5za9xKlUENrNtlq9XuLNVKzxEyeUM7JyxzdY7JiEphWImwgOYf6II316d0Z6-H3oYsFezf4Xsjz-MOBYEov0P64UaB5nJMvDyApV-NWpgklLASfNoSPGb67Bc02aFRZrm4kLk-xTl6eKE6hSo0XU2z2t70stFJDxvNQobnvNHrAmBaHWPAcC3FGwFnBOojpZB2tzG1gLEbmdROVDp8kHEYAwnRK947Py12fJNKExUdN0njmXrKxNZ_fEM33LHW1Tf4kMX_GvNmbWHtBnIyG0w5emb-b54ef5AwV5_tGUeivTCCysgucEc-S7G8Cz0xNJ_BOiM_4bAv9iFmrm9STkltpz0-Tftg8WKmaJiC0xXj6uTf4ZkX79mJJIuuM7XP4ARIcLpkktyg2Iym9jcZqymRkGH2Rm9sxBwC4eeZXM7M5a7TJ-5CqOdfuE3sBPq40RdEWMFLcrAzFvP0VDR8NKHIrPR1AcUruat9DETmTNJukdlJN3O41nWdZOVoJM-uKN3uz2wQ2Ld1z0Mb9_6YfMox9KTJNzRzcL52r4V_y3kB6ekaOZ9wQ3HxGBQ4zFt-2U0mSszIAA",
"id_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiI2MjUzOTFhZi1jNjc1LTQzZTUtOGU0NC1lZGQzZTMwY2ViMTUiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC8yNjAzOWNjZS00ODlkLTQwMDItODI5My01YjBjNTEzNGVhY2IvIiwiaWF0IjoxNDkzNDIzMTY4LCJuYmYiOjE0OTM0MjMxNjgsImV4cCI6MTQ5MzQ2Njk1MSwiYW1yIjpbInB3ZCJdLCJmYW1pbHlfbmFtZSI6IlRlc3QiLCJnaXZlbl9uYW1lIjoiTmF2eWEiLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTc3IiwibmFtZSI6Ik5hdnlhIFRlc3QiLCJvaWQiOiIxY2Q0YmNhYy1iODA4LTQyM2EtOWUyZi04MjdmYmIxYmI3MzkiLCJwbGF0ZiI6IjMiLCJzdWIiOiJEVXpYbkdKMDJIUk0zRW5pbDFxdjZCakxTNUllQy0tQ2ZpbzRxS1MzNEc4IiwidGlkIjoiMjYwMzljY2UtNDg5ZC00MDAyLTgyOTMtNWIwYzUxMzRlYWNiIiwidW5pcXVlX25hbWUiOiJuYXZ5YUBkZG9iYWxpYW5vdXRsb29rLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6Im5hdnlhQGRkb2JhbGlhbm91dGxvb2sub25taWNyb3NvZnQuY29tIiwidXRpIjoieEN3ZnpoYS1QMFdKUU9MeENHZ0tBQSIsInZlciI6IjEuMCJ9."
}
Voorbeeld van fout antwoord
Het Azure AD-tokeneindpunt retourneert een foutbericht wanneer wordt geprobeerd een toegangstoken te verkrijgen voor een downstream-API die is ingesteld met beleid voor voorwaardelijke toegang (bijvoorbeeld meervoudige verificatie). De service in de middelste laag moet deze fout weergeven aan de clienttoepassing, zodat de clienttoepassing de gebruikersinteractie kan bieden om te voldoen aan het beleid voor voorwaardelijke toegang.
{
"error":"interaction_required",
"error_description":"AADSTS50079: Due to a configuration change made by your administrator, or because you moved to a new location, you must enroll in multi-factor authentication to access 'bf8d80f9-9098-4972-b203-500f535113b1'.\r\nTrace ID: b72a68c3-0926-4b8e-bc35-3150069c2800\r\nCorrelation ID: 73d656cf-54b1-4eb2-b429-26d8165a52d7\r\nTimestamp: 2017-05-01 22:43:20Z",
"error_codes":[50079],
"timestamp":"2017-05-01 22:43:20Z",
"trace_id":"b72a68c3-0926-4b8e-bc35-3150069c2800",
"correlation_id":"73d656cf-54b1-4eb2-b429-26d8165a52d7",
"claims":"{\"access_token\":{\"polids\":{\"essential\":true,\"values\":[\"9ab03e19-ed42-4168-b6b7-7001fb3e933a\"]}}}"
}
Gebruik het toegangstoken voor toegang tot de resource
De service op de middelste laag kan het verkregen toegangstoken gebruiken om geverifieerde aanvragen naar de downstream-web-API te verzenden door het token in de Authorization
header in te stellen.
Voorbeeld
GET /me?api-version=2013-11-08 HTTP/1.1
Host: graph.microsoft.com
Authorization: Bearer eyJ0eXAiO ... 0X2tnSQLEANnSPHY0gKcgw
SAML-asserties verkregen met een OAuth2.0 OBO-stroom
Sommige op OAuth gebaseerde webservices moeten toegang hebben tot andere webservice-API's die SAML-asserties accepteren in niet-interactieve stromen. Azure Active Directory kan een SAML-assertie bieden als reactie op een On-Behalf-Of-stroom die gebruikmaakt van een op SAML gebaseerde webservice als doelresource.
Notitie
Dit is een niet-standaardextensie voor de OAuth 2.0 On-Behalf-Of-stroom waarmee een op OAuth2 gebaseerde toepassing toegang heeft tot eindpunten van de webservice-API die SAML-tokens gebruiken.
Tip
Wanneer u een met SAML beveiligde webservice aanroept vanuit een front-endwebtoepassing, kunt u de API aanroepen en een normale interactieve verificatiestroom initiëren met de bestaande sessie van de gebruiker. U hoeft alleen een OBO-stroom te gebruiken wanneer voor een service-naar-service-aanroep een SAML-token is vereist om gebruikerscontext te bieden.
Een SAML-token verkrijgen met behulp van een OBO-aanvraag met een gedeeld geheim
Een service-naar-serviceaanvraag voor een SAML-assertie bevat de volgende parameters:
Parameter | Type | Description |
---|---|---|
grant_type | vereist | Het type tokenaanvraag. Voor een aanvraag die gebruikmaakt van een JWT, moet de waarde urn:ietf:params:oauth:grant-type:jwt-bearer zijn. |
assertie | vereist | De waarde van het toegangstoken dat in de aanvraag wordt gebruikt. |
client_id | vereist | De app-id die is toegewezen aan de aanroepende service tijdens de registratie met Azure AD. Als u de app-id in de Azure Portal wilt zoeken, selecteert u Active Directory, kiest u de map en selecteert u vervolgens de naam van de toepassing. |
client_secret | vereist | De sleutel die is geregistreerd voor de aanroepende service in Azure AD. Deze waarde moet op het moment van registratie zijn genoteerd. |
resource | vereist | De app-id-URI van de ontvangende service (beveiligde resource). Dit is de resource die de doelgroep van het SAML-token is. Als u de app-id-URI in de Azure Portal wilt zoeken, selecteert u Active Directory en kiest u de map. Selecteer de naam van de toepassing, kies Alle instellingen en selecteer vervolgens Eigenschappen. |
requested_token_use | vereist | Hiermee geeft u aan hoe de aanvraag moet worden verwerkt. In de On-Behalf-Of-stroom moet de waarde on_behalf_of worden. |
requested_token_type | vereist | Geeft het aangevraagde tokentype aan. De waarde kan urn:ietf:params:oauth:token-type:saml2 of urn:ietf:params:oauth:token-type:saml1 zijn, afhankelijk van de vereisten van de geopende resource. |
Het antwoord bevat een SAML-token dat is gecodeerd in UTF8 en Base64url.
SubjectConfirmationData voor een SAML-assertie die afkomstig is van een OBO-aanroep: Als voor de doeltoepassing een ontvangerwaarde in SubjectConfirmationData is vereist, moet de waarde een antwoord-URL zonder jokerteken zijn in de configuratie van de resourcetoepassing.
Het knooppunt SubjectConfirmationData: het knooppunt kan geen InResponseTo-kenmerk bevatten, omdat het geen deel uitmaakt van een SAML-antwoord. De toepassing die het SAML-token ontvangt, moet de SAML-assertie kunnen accepteren zonder een InResponseTo-kenmerk.
Toestemming: toestemming moet zijn verleend voor het ontvangen van een SAML-token met gebruikersgegevens in een OAuth-stroom. Zie Machtigingen en toestemming in het Azure Active Directory v1.0-eindpunt voor meer informatie over machtigingen en het verkrijgen van beheerderstoestemming.
Antwoord met SAML-assertie
Parameter | Beschrijving |
---|---|
token_type | Geeft de waarde van het tokentype aan. Het enige type dat Azure AD ondersteunt, is Bearer. Zie OAuth2.2.0 Authorization Framework: Bearer Tokens Usage (RFC 6750) (OAuth2.0 Authorization Framework: Bearer-tokengebruik (RFC 6750)) voor meer informatie over bearer-tokens. |
scope | Het toegangsbereik dat in het token wordt verleend. |
expires_in | De tijdsduur van het toegangstoken is geldig (in seconden). |
expires_on | De tijd waarop het token verloopt. De datum wordt weergegeven als het aantal seconden van 1970-01-01T0:0:0Z UTC tot de vervaltijd. Deze waarde wordt gebruikt om de levensduur van tokens in de cache te bepalen. |
resource | De app-id-URI van de ontvangende service (beveiligde resource). |
access_token | De parameter die de SAML-assertie retourneert. |
refresh_token | Het vernieuwingstoken. De aanroepende service kan dit token gebruiken om een ander toegangstoken aan te vragen nadat het huidige toegangstoken is verlopen. |
- token_type: Bearer
- expires_in: 3296
- ext_expires_in: 0
- expires_on: 1529627844
- resource:
https://api.contoso.com
- access_token: <SAML-assertie>
- issued_token_type: urn:ietf:params:oauth:token-type:saml2
- refresh_token: <Token vernieuwen>
Clientbeperkingen
Openbare clients met antwoord-URL's met jokertekens kunnen geen id_token
voor OBO-stromen gebruiken. Een vertrouwelijke client kan echter nog steeds toegangstokens inwisselen die zijn verkregen via de impliciete toekenningsstroom, zelfs als de openbare client een omleidings-URI met jokertekens heeft geregistreerd.
Volgende stappen
Meer informatie over het OAuth 2.0-protocol en een andere manier om service-naar-service-verificatie uit te voeren die gebruikmaakt van clientreferenties: