Service-naar-service-aanroepen met behulp van clientreferenties (gedeeld geheim of certificaat)
Waarschuwing
Deze inhoud is voor het oudere Azure AD v1.0-eindpunt. Gebruik het Microsoft Identity Platform voor nieuwe projecten.
Met de OAuth 2.0 Client Credentials Grant Flow kan een webservice (vertrouwelijke client) eigen referenties gebruiken in plaats van een gebruiker te imiteren, om te verifiëren bij het aanroepen van een andere webservice. In dit scenario is de client meestal een webservice in de middelste laag, een daemonservice of een website. Voor een hoger niveau van zekerheid staat Azure AD de aanroepende service ook toe om een certificaat (in plaats van een gedeeld geheim) als referentie te gebruiken.
Stroomdiagram voor het verlenen van clientreferenties
In het volgende diagram wordt uitgelegd hoe de stroom voor het verlenen van clientreferenties werkt in Azure Active Directory (Azure AD).
- De clienttoepassing wordt geverifieerd bij het eindpunt voor tokenuitgifte van Azure AD en vraagt een toegangstoken aan.
- Het eindpunt voor Azure AD tokenuitgifte geeft het toegangstoken uit.
- Het toegangstoken wordt gebruikt voor verificatie bij de beveiligde resource.
- Gegevens van de beveiligde resource worden geretourneerd naar de clienttoepassing.
De Services registreren in Azure AD
Registreer zowel de aanroepende service als de ontvangende service in Azure Active Directory (Azure AD). Zie Toepassingen integreren met Azure Active Directory voor gedetailleerde instructies.
Een toegangstoken aanvragen
Als u een toegangstoken wilt aanvragen, gebruikt u een HTTP POST voor het tenantspecifieke Azure AD-eindpunt.
https://login.microsoftonline.com/<tenant id>/oauth2/token
Service-naar-service-toegangstoken-aanvraag
Er zijn twee gevallen, afhankelijk van of de clienttoepassing ervoor kiest om te worden beveiligd door een gedeeld geheim of 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 | Hiermee geeft u het aangevraagde toekenningstype op. In een stroom voor het verlenen van clientreferenties moet de waarde client_credentials zijn. |
client_id | vereist | Hiermee geeft u de Azure AD client-id van de aanroepende webservice. Als u de client-id van de aanroepende toepassing wilt zoeken, klikt u in de Azure Portal op Azure Active Directory, klikt u op App-registraties en klikt u op de toepassing. De client_id is de toepassings-id |
client_secret | vereist | Voer een sleutel in die is geregistreerd voor de aanroepende webservice of daemontoepassing in Azure AD. Als u een sleutel wilt maken, klikt u in de Azure Portal op Azure Active Directory, klikt u op App-registraties, klikt u op de toepassing, klikt u op Instellingen, klikt u op Sleutels en voegt u een sleutel toe. URL-codering van dit geheim wanneer u het opgeeft. |
resource | vereist | Voer de app-id-URI van de ontvangende webservice in. Als u de app-id-URI wilt vinden, klikt u in de Azure Portal op Azure Active Directory, klikt u op App-registraties, klikt u op de servicetoepassing en klikt u vervolgens op Instellingen en eigenschappen. |
Voorbeeld
Met de volgende HTTP POST wordt een toegangstoken voor de https://service.contoso.com/
webservice aangevraagd. De client_id
identificeert de webservice die het toegangstoken aanvraagt.
POST /contoso.com/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&client_id=625bc9f6-3bf6-4b6d-94ba-e97cf07a22de&client_secret=qkDwDJlDfig2IpeuUZYKH1Wb8q1V0ju6sILxQQqhJ+s=&resource=https%3A%2F%2Fservice.contoso.com%2F
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 | Hiermee geeft u het aangevraagde antwoordtype op. In een stroom voor het verlenen van clientreferenties moet de waarde client_credentials zijn. |
client_id | vereist | Hiermee geeft u de Azure AD client-id van de aanroepende webservice. Als u de client-id van de aanroepende toepassing wilt zoeken, klikt u in de Azure Portal op Azure Active Directory, klikt u op App-registraties en klikt u op de toepassing. De client_id is de toepassings-id |
client_assertion_type | vereist | De waarde moet urn:ietf:params:oauth:client-assertion-type:jwt-bearer zijn |
client_assertion | vereist | Een assertie (een JSON-webtoken) die u moet maken en ondertekenen met het certificaat dat u hebt geregistreerd als referenties voor uw toepassing. Lees meer over certificaatreferenties voor meer informatie over het registreren van uw certificaat en de indeling van de assertie. |
resource | vereist | Voer de app-id-URI van de ontvangende webservice in. Als u de app-id-URI wilt vinden, klikt u in de Azure Portal op Azure Active Directory, klikt u op App-registraties, klikt u op de servicetoepassing en klikt u vervolgens op Instellingen en eigenschappen. |
U ziet dat de parameters bijna hetzelfde zijn als in het geval van de aanvraag door een gedeeld geheim, behalve dat de parameter client_secret wordt vervangen door twee parameters: een client_assertion_type en client_assertion.
Voorbeeld
De volgende HTTP POST vraagt een toegangstoken aan voor de https://service.contoso.com/
webservice met een certificaat. De client_id
identificeert de webservice die het toegangstoken aanvraagt.
POST /<tenant_id>/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
resource=https%3A%2F%contoso.onmicrosoft.com%2Ffc7664b4-cdd6-43e1-9365-c2e1c4e1b3bf&client_id=97e0a5b7-d745-40b6-94fe-5f77d35c6e05&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=eyJhbGciOiJSUzI1NiIsIng1dCI6Imd4OHRHeXN5amNScUtqRlBuZDdSRnd2d1pJMCJ9.eyJ{a lot of characters here}M8U3bSUKKJDEg&grant_type=client_credentials
Antwoord van service-naar-service-toegangstoken
Een geslaagd antwoord bevat een JSON OAuth 2.0-antwoord met de volgende parameters:
Parameter | Beschrijving |
---|---|
access_token | Het aangevraagde toegangstoken. De aanroepende webservice kan dit token gebruiken om te verifiëren bij de ontvangende webservice. |
token_type | Geeft de waarde van het tokentype aan. Het enige type dat Azure AD ondersteunt, is Bearer. Zie Het OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750) voor meer informatie over Bearer-tokens. |
expires_in | Hoe lang het toegangstoken geldig is, 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. |
not_before | Het tijdstip waarop het toegangstoken bruikbaar wordt. De datum wordt weergegeven als het aantal seconden van 1970-01-01T0:0:0Z UTC tot het tijdstip van geldigheid voor het token. |
resource | De app-id-URI van de ontvangende webservice. |
Voorbeeld van antwoord
In het volgende voorbeeld ziet u een geslaagde reactie op een aanvraag voor een toegangstoken voor een webservice.
{
"access_token":"eyJ0eXAiO ... 0X2tnSQLEANnSPHY0gKcgw",
"token_type":"Bearer",
"expires_in":"3599",
"expires_on":"1388452167",
"resource":"https://service.contoso.com/"
}
Gebruik het toegangstoken voor toegang tot de resource
De service kan het verkregen toegangstoken gebruiken om geverifieerde aanvragen naar de downstream web-API te doen 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