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

Stroom voor het verlenen van OAuth2.0-clientreferenties

  1. De clienttoepassing wordt geverifieerd bij het eindpunt voor tokenuitgifte van Azure AD en vraagt een toegangstoken aan.
  2. Het eindpunt voor Azure AD tokenuitgifte geeft het toegangstoken uit.
  3. Het toegangstoken wordt gebruikt voor verificatie bij de beveiligde resource.
  4. 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

Zie ook