Dela via


Tjänst-till-tjänst-anrop som använder delegerad användaridentitet i on-behalf-of-flödet

Varning

Det här innehållet gäller för den äldre Azure AD v1.0-slutpunkten. Använd Microsofts identitetsplattform för nya projekt.

OAuth 2.0 On-Behalf-Of-flödet (OBO) gör det möjligt för ett program som anropar en tjänst eller ett webb-API att skicka användarautentisering till en annan tjänst eller ett annat webb-API. OBO-flödet sprider den delegerade användaridentiteten och behörigheterna via begärandekedjan. För att mellannivåtjänsten ska kunna göra autentiserade begäranden till den underordnade tjänsten måste den skydda en åtkomsttoken från Azure Active Directory (Azure AD) för användarens räkning.

Viktigt

Från och med maj 2018 kan en id_token inte användas för flödet För räkning. Ensidesappar (SPA: er) måste skicka en åtkomsttoken till en konfidentiell klient på mellannivå för att utföra OBO-flöden. Mer information om klienter som kan utföra Å-Behalf-Of-anrop finns i begränsningar.

Flödesdiagram för uppdrag

OBO-flödet startar när användaren har autentiserats i ett program som använder OAuth 2.0-auktoriseringskodens beviljandeflöde. Då skickar programmet en åtkomsttoken (token A) till webb-API:et på mellannivå (API A) som innehåller användarens anspråk och samtycker till åtkomst till API A. Därefter gör API A en autentiserad begäran till det underordnade webb-API:et (API B).

De här stegen utgör flödet Å-Behalf-Of: Visar stegen i OAuth2.0 On-Behalf-Of-flödet

  1. Klientprogrammet skickar en begäran till API A med token A.
  2. API A autentiserar till slutpunkten för Azure AD tokenutfärdning och begär en token för åtkomst till API B.
  3. Slutpunkten för Azure AD tokenutfärdning validerar API A:s autentiseringsuppgifter med token A och utfärdar åtkomsttoken för API B (token B).
  4. Begäran till API B innehåller token B i auktoriseringshuvudet.
  5. API B returnerar data från den skyddade resursen.

Anteckning

Målgruppsanspråket i en åtkomsttoken som används för att begära en token för en underordnad tjänst måste vara ID:t för tjänsten som gör OBO-begäran. Token måste också signeras med den globala signeringsnyckeln för Azure Active Directory (som är standard för program som registrerats via Appregistreringar i portalen).

Registrera programmet och tjänsten i Azure AD

Registrera både mellannivåtjänsten och klientprogrammet i Azure AD.

Registrera mellannivåtjänsten

  1. Logga in på Azure-portalen.
  2. I det översta fältet väljer du ditt konto och tittar under kataloglistan för att välja en Active Directory-klient för ditt program.
  3. Välj Fler tjänster i det vänstra fönstret och välj Azure Active Directory.
  4. Välj Appregistreringar och sedan Ny registrering.
  5. Ange ett eget namn för programmet och välj programtyp.
  6. Under Kontotyper som stöds väljer du Accounts in any organizational directory and personal Microsoft accounts (Konton i alla organisationskataloger och personliga Microsoft-konton).
  7. Ange omdirigerings-URI:n till bas-URL:en.
  8. Välj Registrera för att skapa programmet.
  9. I Azure Portal väljer du ditt program och väljer Certifikat & hemligheter.
  10. Välj Ny klienthemlighet och lägg till en hemlighet med en varaktighet på antingen ett år eller två år.
  11. När du sparar den här sidan visar Azure Portal det hemliga värdet. Kopiera och spara det hemliga värdet på en säker plats.
  12. Skapa ett omfång för ditt program på sidan Exponera ett API för din app och klicka på "Lägg till ett omfång". Portalen kan också kräva att du skapar en program-ID-URI.

Viktigt

Du behöver hemligheten för att konfigurera programinställningarna i implementeringen. Det här hemliga värdet visas inte igen och kan inte hämtas på något annat sätt. Registrera den så snart den visas i Azure Portal.

Registrera klientprogrammet

  1. Logga in på Azure-portalen.
  2. I det översta fältet väljer du ditt konto och tittar under kataloglistan för att välja en Active Directory-klient för ditt program.
  3. Välj Fler tjänster i det vänstra fönstret och välj Azure Active Directory.
  4. Välj Appregistreringar och sedan Ny registrering.
  5. Ange ett eget namn för programmet och välj programtyp.
  6. Under Kontotyper som stöds väljer du Accounts in any organizational directory and personal Microsoft accounts (Konton i alla organisationskataloger och personliga Microsoft-konton).
  7. Ange omdirigerings-URI:n till bas-URL:en.
  8. Välj Registrera för att skapa programmet.
  9. Konfigurera behörigheter för ditt program. I API-behörigheter väljer du Lägg till en behörighet och sedan Mina API:er.
  10. Ange namnet på mellannivåtjänsten i textfältet.
  11. Välj Välj behörigheter och välj sedan det omfång som du skapade i det sista steget för att registrera mellannivån.

Konfigurera kända klientprogram

I det här scenariot måste mellannivåtjänsten få användarens medgivande för att få åtkomst till det underordnade API:et utan någon användarinteraktion. Alternativet att bevilja åtkomst till det underordnade API:et måste visas i förväg som en del av medgivandesteget under autentiseringen.

Följ stegen nedan för att uttryckligen binda klientappens registrering i Azure AD med mellannivåtjänstens registrering. Den här åtgärden sammanfogar det medgivande som krävs av både klienten och mellannivån i en enda dialogruta.

  1. Gå till tjänstregistreringen på mellannivå och välj Manifest för att öppna manifestredigeraren.
  2. Leta upp matrisegenskapen knownClientApplications och lägg till klient-ID:t för klientprogrammet som ett element.
  3. Spara manifestet genom att välja Spara.

Begäran om tjänst-till-tjänst-åtkomsttoken

Om du vill begära en åtkomsttoken gör du en HTTP POST till den klientspecifika Azure AD slutpunkten med följande parametrar:

https://login.microsoftonline.com/<tenant>/oauth2/token

Klientprogrammet skyddas antingen av en delad hemlighet eller av ett certifikat.

Första fallet: Åtkomsttokenbegäran med en delad hemlighet

När du använder en delad hemlighet innehåller en tjänst-till-tjänst-åtkomsttokenbegäran följande parametrar:

Parameter Typ Description
grant_type krävs Typ av tokenbegäran. En OBO-begäran använder en JSON-webbtoken (JWT) så värdet måste vara urn:ietf:params:oauth:grant-type:jwt-bearer.
Påstående krävs Värdet för den åtkomsttoken som används i begäran.
client_id krävs Det app-ID som tilldelats till den anropande tjänsten under registreringen med Azure AD. Om du vill hitta app-ID:t i Azure Portal väljer du Active Directory, väljer katalogen och väljer sedan programnamnet.
client_secret krävs Nyckeln som registrerats för den anropande tjänsten i Azure AD. Det här värdet bör ha noterats vid tidpunkten för registreringen.
resource krävs App-ID-URI för den mottagande tjänsten (skyddad resurs). Om du vill hitta app-ID-URI:n i Azure Portal väljer du Active Directory och väljer katalogen. Välj programnamnet, välj Alla inställningar och välj sedan Egenskaper.
requested_token_use krävs Anger hur begäran ska bearbetas. I flödet För räkning måste värdet vara on_behalf_of.
omfång krävs En blankstegsavgränsad lista över omfång för tokenbegäran. För OpenID Connect måste openid-omfånget anges.

Exempel

Följande HTTP POST begär en åtkomsttoken för webb-API:et https://graph.microsoft.com . client_id identifierar den tjänst som begär åtkomsttoken.

// 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

Andra fallet: Begäran om åtkomsttoken med ett certifikat

En begäran om tjänst-till-tjänst-åtkomsttoken med ett certifikat innehåller följande parametrar:

Parameter Typ Description
grant_type krävs Typ av tokenbegäran. En OBO-begäran använder en JWT-åtkomsttoken så värdet måste vara urn:ietf:params:oauth:grant-type:jwt-bearer.
Påstående krävs Värdet för den token som används i begäran.
client_id krävs Det app-ID som tilldelades till den anropande tjänsten under registreringen med Azure AD. Om du vill hitta app-ID:t i Azure Portal väljer du Active Directory, väljer katalogen och sedan programnamnet.
client_assertion_type krävs Värdet måste vara urn:ietf:params:oauth:client-assertion-type:jwt-bearer
client_assertion krävs En JSON-webbtoken som du skapar och signerar med det certifikat som du registrerade som autentiseringsuppgifter för ditt program. Se certifikatautentiseringsuppgifter för att lära dig mer om kontrollformat och om hur du registrerar ditt certifikat.
resource krävs App-ID-URI för den mottagande tjänsten (skyddad resurs). Om du vill hitta app-ID-URI:n i Azure Portal väljer du Active Directory och väljer katalogen. Välj programnamnet, välj Alla inställningar och välj sedan Egenskaper.
requested_token_use krävs Anger hur begäran ska bearbetas. I on-behalf-of-flödet måste värdet vara on_behalf_of.
omfång krävs En blankstegsavgränsad lista över omfång för tokenbegäran. För OpenID Connect måste openid-omfånget anges.

Dessa parametrar är nästan desamma som med begäran av delad hemlighet förutom att client_secret parameter ersätts av två parametrar: client_assertion_type och client_assertion.

Exempel

Följande HTTP POST begär en åtkomsttoken för webb-API:et https://graph.microsoft.com med ett certifikat. client_id identifierar den tjänst som begär åtkomsttoken.

// 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

Svar från tjänst till tjänst-åtkomsttoken

Ett lyckat svar är ett JSON OAuth 2.0-svar med följande parametrar:

Parameter Beskrivning
token_type Anger tokentypvärdet. Den enda typ som Azure AD stöder är Bearer. Mer information om ägartoken finns i OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750).
omfång Åtkomstomfånget som beviljats i token.
expires_in Hur lång tid åtkomsttoken är giltig (i sekunder).
expires_on Den tid då åtkomsttoken upphör att gälla. Datumet representeras som antalet sekunder från 1970-01-01T0:0:0Z UTC fram till förfallotiden. Det här värdet används för att fastställa livslängden för cachelagrade token.
resource App-ID-URI för den mottagande tjänsten (skyddad resurs).
access_token Begärd åtkomsttoken. Den anropande tjänsten kan använda denna token för att autentisera till den mottagande tjänsten.
id_token Den begärda ID-token. Den anropande tjänsten kan använda denna token för att verifiera användarens identitet och starta en session med användaren.
refresh_token Uppdateringstoken för den begärda åtkomsttoken. Den anropande tjänsten kan använda denna token för att begära en annan åtkomsttoken när den aktuella åtkomsttoken upphör att gälla.

Exempel på lyckat svar

I följande exempel visas ett lyckat svar på en begäran om en åtkomsttoken för webb-API:et https://graph.microsoft.com .

{
    "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."
}

Exempel på felsvar

Den Azure AD tokenslutpunkten returnerar ett felsvar när den försöker hämta en åtkomsttoken för ett underordnat API som har angetts med en princip för villkorsstyrd åtkomst (till exempel multifaktorautentisering). Mellannivåtjänsten bör visa det här felet för klientprogrammet så att klientprogrammet kan tillhandahålla användarinteraktion för att uppfylla principen för villkorsstyrd åtkomst.

{
    "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\"]}}}"
}

Använda åtkomsttoken för att komma åt den skyddade resursen

Mellannivåtjänsten kan använda den förvärvade åtkomsttoken för att göra autentiserade begäranden till det underordnade webb-API:et Authorization genom att ange token i rubriken.

Exempel

GET /me?api-version=2013-11-08 HTTP/1.1
Host: graph.microsoft.com
Authorization: Bearer eyJ0eXAiO ... 0X2tnSQLEANnSPHY0gKcgw

SAML-försäkran som erhållits med ett OAuth2.0 OBO-flöde

Vissa OAuth-baserade webbtjänster måste ha åtkomst till andra webbtjänst-API:er som accepterar SAML-intyg i icke-interaktiva flöden. Azure Active Directory kan tillhandahålla en SAML-försäkran som svar på ett on-behalf-of-flöde som använder en SAML-baserad webbtjänst som målresurs.

Anteckning

Det här är ett tillägg som inte är standard för OAuth 2.0 On-Behalf-Of-flödet som gör att ett OAuth2-baserat program kan komma åt webbtjänst-API-slutpunkter som använder SAML-token.

Tips

När du anropar en SAML-skyddad webbtjänst från en klientwebbapp kan du helt enkelt anropa API:et och initiera ett normalt interaktivt autentiseringsflöde med användarens befintliga session. Du behöver bara använda ett OBO-flöde när ett tjänst-till-tjänst-anrop kräver en SAML-token för att tillhandahålla användarkontext.

Hämta en SAML-token med hjälp av en OBO-begäran med en delad hemlighet

En tjänst-till-tjänst-begäran för en SAML-försäkran innehåller följande parametrar:

Parameter Typ Description
grant_type krävs Typ av tokenbegäran. För en begäran som använder en JWT måste värdet vara urn:ietf:params:oauth:grant-type:jwt-bearer.
Påstående krävs Värdet för den åtkomsttoken som används i begäran.
client_id krävs Det app-ID som tilldelades till den anropande tjänsten under registreringen med Azure AD. Om du vill hitta app-ID:t i Azure Portal väljer du Active Directory, väljer katalogen och sedan programnamnet.
client_secret krävs Den nyckel som registrerats för den anropande tjänsten i Azure AD. Det här värdet bör ha noterats vid tidpunkten för registreringen.
resource krävs App-ID-URI för den mottagande tjänsten (skyddad resurs). Det här är resursen som ska vara målgrupp för SAML-token. Om du vill hitta app-ID-URI:n i Azure Portal väljer du Active Directory och väljer katalogen. Välj programnamnet, välj Alla inställningar och välj sedan Egenskaper.
requested_token_use krävs Anger hur begäran ska bearbetas. I on-behalf-of-flödet måste värdet vara on_behalf_of.
requested_token_type krävs Anger vilken typ av token som begärs. Värdet kan vara urn:ietf:params:oauth:token-type:saml2 eller urn:ietf:params:oauth:token-type:saml1 beroende på kraven för den använda resursen.

Svaret innehåller en SAML-token som kodats i UTF8 och Base64url.

  • SubjectConfirmationData för en SAML-försäkran som kommer från ett OBO-anrop: Om målprogrammet kräver ett mottagarvärde i SubjectConfirmationData måste värdet vara en svars-URL utan jokertecken i resursprogramkonfigurationen.

  • Noden SubjectConfirmationData: Noden kan inte innehålla ett InResponseTo-attribut eftersom den inte ingår i ett SAML-svar. Programmet som tar emot SAML-token måste kunna acceptera SAML-försäkran utan ett InResponseTo-attribut .

  • Medgivande: Medgivande måste ha beviljats för att ta emot en SAML-token som innehåller användardata i ett OAuth-flöde. Information om behörigheter och hur du skaffar administratörsmedgivande finns i Behörigheter och medgivande i Azure Active Directory v1.0-slutpunkten.

Svar med SAML-försäkran

Parameter Beskrivning
token_type Anger tokentypvärdet. Den enda typ som Azure AD stöder är Bearer. Mer information om ägartoken finns i OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750).
omfång Åtkomstomfånget som beviljats i token.
expires_in Hur lång tid åtkomsttoken är giltig (i sekunder).
expires_on Den tid då åtkomsttoken upphör att gälla. Datumet representeras som antalet sekunder från 1970-01-01T0:0:0Z UTC fram till förfallotiden. Det här värdet används för att fastställa livslängden för cachelagrade token.
resource App-ID-URI för den mottagande tjänsten (skyddad resurs).
access_token Parametern som returnerar SAML-försäkran.
refresh_token Uppdateringstoken. Den anropande tjänsten kan använda denna token för att begära en annan åtkomsttoken när den aktuella SAML-försäkran upphör att gälla.
  • token_type: Bärare
  • expires_in: 3296
  • ext_expires_in: 0
  • expires_on: 1529627844
  • Resurs: https://api.contoso.com
  • access_token: <SAML-försäkran>
  • issued_token_type: urn:ietf:params:oauth:token-type:saml2
  • refresh_token: <Uppdateringstoken>

Klientbegränsningar

Offentliga klienter med svars-URL:er med jokertecken kan inte använda för id_token OBO-flöden. En konfidentiell klient kan dock fortfarande lösa in åtkomsttoken som hämtats via det implicita beviljandeflödet även om den offentliga klienten har en omdirigerings-URI med jokertecken registrerad.

Nästa steg

Läs mer om OAuth 2.0-protokollet och ett annat sätt att utföra tjänst-till-tjänst-autentisering som använder klientautentiseringsuppgifter: