Volání service-to-service, která používají delegovanou identitu uživatele v toku On-Behalf-Of
Upozornění
Tento obsah je určený pro starší koncový bod Azure AD verze 1.0. Pro nové projekty použijte Microsoft identity platform.
Tok OAuth 2.0 On-Behalf-Of (OBO) umožňuje aplikaci, která volá službu nebo webové rozhraní API, předat ověřování uživatele jiné službě nebo webovému rozhraní API. Tok OBO šíří identitu a oprávnění delegovaného uživatele prostřednictvím řetězu požadavků. Aby služba střední vrstvy zasílala ověřené požadavky na podřízenou službu, musí jménem uživatele zabezpečit přístupový token z Azure Active Directory (Azure AD).
Důležité
Od května 2018 id_token
nejde použít pro tok On-Behalf-Of. Jednostránkové aplikace (SPA) musí předat přístupový token důvěrnému klientovi střední vrstvy, aby bylo potřeba provádět toky OBO. Další podrobnosti o klientech, kteří můžou provádět volání on-Behalf-Of, najdete v tématu Omezení.
Vývojový diagram on-Behalf-Of
Tok OBO se spustí po ověření uživatele v aplikaci, která používá tok udělení autorizačního kódu OAuth 2.0. V tomto okamžiku aplikace odešle do webového rozhraní API střední vrstvy (API A) přístupový token (token A), který obsahuje deklarace identity uživatele a souhlas s přístupem k rozhraní API A. Dále rozhraní API A vytvoří ověřený požadavek na podřízené webové rozhraní API (API B).
Tyto kroky tvoří tok On-Behalf-Of: .
- Klientská aplikace vytvoří požadavek na rozhraní API A pomocí tokenu A.
- Rozhraní API A se ověřuje ve koncovém bodu vystavování tokenu Azure AD a vyžádá si token pro přístup k rozhraní API B.
- Koncový bod vystavování tokenu Azure AD ověří přihlašovací údaje rozhraní API A pomocí tokenu A a vydá přístupový token pro rozhraní API B (token B).
- Požadavek na rozhraní API B obsahuje token B v autorizační hlavičce.
- Rozhraní API B vrací data ze zabezpečeného prostředku.
Poznámka
Deklarace identity cílové skupiny v přístupovém tokenu, který se používá k vyžádání tokenu pro podřízenou službu, musí být ID služby, která provádí žádost OBO. Token musí být také podepsaný globálním podpisovým klíčem Azure Active Directory (což je výchozí nastavení pro aplikace zaregistrované prostřednictvím Registrace aplikací na portálu).
Registrace aplikace a služby v Azure AD
Zaregistrujte službu střední vrstvy i klientskou aplikaci v Azure AD.
Registrace služby střední vrstvy
- Přihlaste se k webu Azure Portal.
- Na horním panelu vyberte svůj účet a v seznamu Adresář vyberte tenanta Služby Active Directory pro vaši aplikaci.
- V levém podokně vyberte Další služby a zvolte Azure Active Directory.
- Vyberte Registrace aplikací a pak Nová registrace.
- Zadejte popisný název aplikace a vyberte typ aplikace.
- V části Podporované typy účtů vyberte Účty v libovolném adresáři organizace a osobní účty Microsoft.
- Nastavte identifikátor URI přesměrování na základní adresu URL.
- Výběrem možnosti Registrovat aplikaci vytvořte.
- V Azure Portal zvolte aplikaci a vyberte Certifikáty & tajné kódy.
- Vyberte Nový tajný klíč klienta a přidejte tajný klíč s dobou trvání jednoho nebo dvou let.
- Když tuto stránku uložíte, Azure Portal zobrazí hodnotu tajného kódu. Zkopírujte a uložte hodnotu tajného klíče do bezpečného umístění.
- Na stránce Vystavit rozhraní API pro vaši aplikaci vytvořte obor a klikněte na Přidat obor. Portál může vyžadovat také vytvoření identifikátoru URI ID aplikace.
Důležité
Tajný klíč potřebujete ke konfiguraci nastavení aplikace ve vaší implementaci. Tato hodnota tajného kódu se znovu nezobrazí a není možné ji žádným jiným způsobem načíst. Zaznamenejte ho, jakmile se zobrazí v Azure Portal.
Registrace klientské aplikace
- Přihlaste se k webu Azure Portal.
- Na horním panelu vyberte svůj účet a v seznamu Adresář vyberte tenanta Služby Active Directory pro vaši aplikaci.
- V levém podokně vyberte Další služby a zvolte Azure Active Directory.
- Vyberte Registrace aplikací a pak Nová registrace.
- Zadejte popisný název aplikace a vyberte typ aplikace.
- V části Podporované typy účtů vyberte Účty v libovolném adresáři organizace a osobní účty Microsoft.
- Nastavte identifikátor URI přesměrování na základní adresu URL.
- Výběrem možnosti Registrovat aplikaci vytvořte.
- Nakonfigurujte oprávnění pro vaši aplikaci. V části Oprávnění rozhraní API vyberte Přidat oprávnění a pak Moje rozhraní API.
- Do textového pole zadejte název služby střední vrstvy.
- Zvolte Vybrat oprávnění a pak vyberte obor, který jste vytvořili v posledním kroku registrace střední vrstvy.
Konfigurace známých klientských aplikací
V tomto scénáři musí služba střední vrstvy získat souhlas uživatele s přístupem k podřízené rozhraní API bez zásahu uživatele. Možnost udělení přístupu k podřízené službě API musí být během ověřování prezentována předem jako součást kroku souhlasu.
Pokud chcete explicitně vytvořit vazbu registrace klientské aplikace v Azure AD s registrací služby střední vrstvy, postupujte podle následujících kroků. Tato operace sloučí souhlas vyžadovaný klientem i střední vrstvou do jediného dialogového okna.
- Přejděte na registraci služby střední vrstvy a výběrem manifestu otevřete editor manifestu.
-
knownClientApplications
Vyhledejte vlastnost pole a přidejte ID klienta klientské aplikace jako prvek. - Uložte manifest tak, že vyberete Uložit.
Žádost o přístupový token služby-služba
Pokud chcete požádat o přístupový token, nastavte do koncového bodu Azure AD specifického pro tenanta http POST s následujícími parametry:
https://login.microsoftonline.com/<tenant>/oauth2/token
Klientská aplikace je zabezpečená buď sdíleným tajným kódem, nebo certifikátem.
První případ: Žádost o přístupový token se sdíleným tajným kódem
Při použití sdíleného tajného kódu obsahuje žádost o přístup k tokenu service-to-service následující parametry:
Parametr | Typ | Description |
---|---|---|
grant_type | vyžadováno | Typ požadavku na token. Požadavek OBO používá webový token JSON (JWT), takže hodnota musí být urn:ietf:params:oauth:grant-type:jwt-bearer. |
Tvrzení | vyžadováno | Hodnota přístupového tokenu použitého v požadavku. |
client_id | vyžadováno | ID aplikace přiřazené volající službě během registrace pomocí Azure AD. Pokud chcete najít ID aplikace v Azure Portal, vyberte Active Directory, zvolte adresář a pak vyberte název aplikace. |
client_secret | vyžadováno | Klíč zaregistrovaný pro volající službu v Azure AD. Tato hodnota by měla být zaznamenána v době registrace. |
prostředek | vyžadováno | Identifikátor URI ID aplikace přijímající služby (zabezpečený prostředek) Pokud chcete najít identifikátor URI ID aplikace v Azure Portal, vyberte Active Directory a zvolte adresář. Vyberte název aplikace, zvolte Všechna nastavení a pak vyberte Vlastnosti. |
requested_token_use | vyžadováno | Určuje, jak se má žádost zpracovat. V toku On-Behalf-Of musí být hodnota on_behalf_of. |
scope | vyžadováno | Seznam oborů pro požadavek na token oddělený mezerami. Pro OpenID Connect musí být zadáno openid oboru. |
Příklad
Následující protokol HTTP POST požaduje přístupový token pro https://graph.microsoft.com webové rozhraní API. Identifikuje client_id
službu, která požaduje přístupový token.
// 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
Druhý případ: Žádost o přístupový token s certifikátem
Žádost o přístup k tokenu service-to-service s certifikátem obsahuje následující parametry:
Parametr | Typ | Description |
---|---|---|
grant_type | vyžadováno | Typ požadavku na token. Žádost OBO používá přístupový token JWT, takže hodnota musí být urn:ietf:params:oauth:grant-type:jwt-bearer. |
Tvrzení | vyžadováno | Hodnota tokenu použitého v požadavku. |
client_id | vyžadováno | ID aplikace přiřazené volající službě během registrace pomocí Azure AD. Pokud chcete najít ID aplikace v Azure Portal, vyberte Active Directory, zvolte adresář a pak vyberte název aplikace. |
client_assertion_type | vyžadováno | Hodnota musí být urn:ietf:params:oauth:client-assertion-type:jwt-bearer |
client_assertion | vyžadováno | Webový token JSON, který vytvoříte a podepíšete certifikátem, který jste zaregistrovali jako přihlašovací údaje pro vaši aplikaci. Informace o formátu kontrolního výrazu a registraci certifikátu najdete v tématu Přihlašovací údaje certifikátu. |
prostředek | vyžadováno | Identifikátor URI ID aplikace přijímající služby (zabezpečený prostředek) Pokud chcete najít identifikátor URI ID aplikace v Azure Portal, vyberte Active Directory a zvolte adresář. Vyberte název aplikace, zvolte Všechna nastavení a pak vyberte Vlastnosti. |
requested_token_use | vyžadováno | Určuje, jak se má žádost zpracovat. V toku On-Behalf-Of musí být hodnota on_behalf_of. |
scope | vyžadováno | Seznam oborů pro požadavek na token oddělený mezerami. Pro OpenID Connect musí být zadáno openid oboru. |
Tyto parametry jsou téměř stejné jako u požadavku pomocí sdíleného tajného client_secret parameter
klíče s tím rozdílem, že se nahradí dvěma parametry: client_assertion_type
a client_assertion
.
Příklad
Následující protokol HTTP POST vyžaduje přístupový token pro https://graph.microsoft.com webové rozhraní API s certifikátem. Identifikuje client_id
službu, která požaduje přístupový token.
// 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
Odpověď přístupového tokenu service-to-service
Úspěšná odpověď je odpověď JSON OAuth 2.0 s následujícími parametry:
Parametr | Popis |
---|---|
token_type | Označuje hodnotu typu tokenu. Jediný typ, který Azure AD podporuje, je Bearer. Další informace o nosných tokenech najdete v tématu OAuth 2.0 Authorization Framework: Použití nosných tokenů (RFC 6750). |
scope | Rozsah přístupu udělený v tokenu. |
expires_in | Doba platnosti přístupového tokenu (v sekundách) |
expires_on | Čas vypršení platnosti přístupového tokenu. Datum je reprezentováno jako počet sekund od 1970-01-01T0:0:0Z UTC do doby vypršení platnosti. Tato hodnota se používá k určení životnosti tokenů uložených v mezipaměti. |
prostředek | Identifikátor URI ID aplikace přijímající služby (zabezpečený prostředek) |
access_token | Požadovaný přístupový token. Volající služba může tento token použít k ověření v přijímající službě. |
id_token | Požadovaný token ID. Volající služba může tento token použít k ověření identity uživatele a zahájení relace s uživatelem. |
refresh_token | Obnovovací token požadovaného přístupového tokenu. Volající služba může tento token použít k vyžádání dalšího přístupového tokenu po vypršení platnosti aktuálního přístupového tokenu. |
Příklad úspěšné odpovědi
Následující příklad ukazuje úspěšnou odpověď na požadavek na přístupový token pro https://graph.microsoft.com webové rozhraní 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."
}
Příklad odpovědi na chybu
Koncový bod tokenu Azure AD vrátí chybovou odpověď při pokusu o získání přístupového tokenu pro podřízené rozhraní API, které je nastavené pomocí zásad podmíněného přístupu (například vícefaktorové ověřování). Služba střední vrstvy by měla tuto chybu zobrazit v klientské aplikaci, aby klientská aplikace mohla poskytovat interakci s uživatelem, aby splňovala zásady podmíněného přístupu.
{
"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\"]}}}"
}
Použití přístupového tokenu pro přístup k zabezpečenému prostředku
Služba střední vrstvy může pomocí získaného přístupového tokenu provádět ověřené požadavky na podřízené webové rozhraní API nastavením tokenu Authorization
v hlavičce.
Příklad
GET /me?api-version=2013-11-08 HTTP/1.1
Host: graph.microsoft.com
Authorization: Bearer eyJ0eXAiO ... 0X2tnSQLEANnSPHY0gKcgw
Kontrolní výrazy SAML získané s tokem OBO OAuth2.0
Některé webové služby založené na OAuth potřebují přístup k jiným rozhraním API webových služeb, která přijímají kontrolní výrazy SAML v neinteraktivních tocích. Azure Active Directory může poskytnout kontrolní výraz SAML v reakci na tok On-Behalf-Of, který jako cílový prostředek používá webovou službu založenou na SAML.
Poznámka
Jedná se o nestandardní rozšíření toku OAuth 2.0 On-Behalf-Of, které aplikaci založené na OAuth2 umožňuje přístup ke koncovým bodům rozhraní API webové služby, které využívají tokeny SAML.
Tip
Když voláte webovou službu chráněnou SAML z front-endové webové aplikace, můžete jednoduše zavolat rozhraní API a zahájit normální tok interaktivního ověřování s existující relací uživatele. Tok OBO potřebujete použít pouze v případech, kdy volání mezi službami vyžaduje token SAML k poskytnutí kontextu uživatele.
Získání tokenu SAML pomocí požadavku OBO se sdíleným tajným kódem
Požadavek mezi službami pro kontrolní výraz SAML obsahuje následující parametry:
Parametr | Typ | Description |
---|---|---|
grant_type | vyžadováno | Typ požadavku na token. U požadavku, který používá JWT, musí být hodnota urn:ietf:params:oauth:grant-type:jwt-bearer. |
Tvrzení | vyžadováno | Hodnota přístupového tokenu použitého v požadavku. |
client_id | vyžadováno | ID aplikace přiřazené volající službě během registrace pomocí Azure AD. Pokud chcete najít ID aplikace v Azure Portal, vyberte Active Directory, zvolte adresář a pak vyberte název aplikace. |
client_secret | vyžadováno | Klíč zaregistrovaný pro volající službu v Azure AD. Tato hodnota by měla být zaznamenána v době registrace. |
prostředek | vyžadováno | Identifikátor URI ID aplikace přijímající služby (zabezpečený prostředek) Toto je prostředek, který bude cílovou skupinou tokenu SAML. Pokud chcete najít identifikátor URI ID aplikace v Azure Portal, vyberte Active Directory a zvolte adresář. Vyberte název aplikace, zvolte Všechna nastavení a pak vyberte Vlastnosti. |
requested_token_use | vyžadováno | Určuje, jak se má žádost zpracovat. V toku On-Behalf-Of musí být hodnota on_behalf_of. |
requested_token_type | vyžadováno | Určuje typ požadovaného tokenu. V závislosti na požadavcích používaného prostředku může být hodnota urn:ietf:params:oauth:token-type:saml2 nebo urn:ietf:params:oauth:token-type:saml1 . |
Odpověď obsahuje token SAML kódovaný v UTF8 a Base64url.
SubjectConfirmationData pro kontrolní výraz SAML, který pochází z volání OBO: Pokud cílová aplikace vyžaduje hodnotu příjemce v SubjectConfirmationData, pak musí být hodnota adresa URL odpovědi, která není zástupným znakem, v konfiguraci aplikace prostředků.
Uzel SubjectConfirmationData: Uzel nemůže obsahovat atribut InResponseTo , protože není součástí odpovědi SAML. Aplikace přijímající token SAML musí být schopná přijmout kontrolní výraz SAML bez atributu InResponseTo .
Souhlas: K získání tokenu SAML obsahujícího uživatelská data v toku OAuth musí být udělen souhlas. Informace o oprávněních a získání souhlasu správce najdete v tématu Oprávnění a souhlas v koncovém bodu Azure Active Directory verze 1.0.
Odpověď s kontrolním výrazem SAML
Parametr | Popis |
---|---|
token_type | Označuje hodnotu typu tokenu. Jediný typ, který Azure AD podporuje, je Bearer. Další informace o nosných tokenech najdete v tématu OAuth 2.0 Authorization Framework: Použití nosných tokenů (RFC 6750). |
scope | Rozsah přístupu udělený v tokenu. |
expires_in | Doba platnosti přístupového tokenu (v sekundách) |
expires_on | Čas vypršení platnosti přístupového tokenu. Datum je reprezentováno jako počet sekund od 1970-01-01T0:0:0Z UTC do doby vypršení platnosti. Tato hodnota se používá k určení životnosti tokenů uložených v mezipaměti. |
prostředek | Identifikátor URI ID aplikace přijímající služby (zabezpečený prostředek) |
access_token | Parametr, který vrací kontrolní výraz SAML. |
refresh_token | Obnovovací token. Volající služba může tento token použít k vyžádání dalšího přístupového tokenu po vypršení platnosti aktuálního kontrolního výrazu SAML. |
- token_type: Nosný
- expires_in: 3296
- ext_expires_in: 0
- expires_on: 1529627844
- Zdrojů:
https://api.contoso.com
- access_token: <Kontrolní výraz SAML>
- issued_token_type: urn:ietf:params:oauth:token-type:saml2
- refresh_token: <Aktualizace tokenu>
Omezení klienta
Veřejní klienti se zástupnými adresami URL odpovědí nemůžou použít pro id_token
toky OBO. Důvěrný klient však může dál uplatnit přístupové tokeny získané prostřednictvím toku implicitního udělení, i když má veřejný klient zaregistrovaný identifikátor URI přesměrování se zástupnými cardy.
Další kroky
Další informace o protokolu OAuth 2.0 a dalším způsobu ověřování mezi službami, které používá přihlašovací údaje klienta: