Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Varování
Tento obsah je určený pro starší koncový bod Azure AD verze 1.0. Pro nové projekty použijte platformu Microsoft Identity Platform.
Poznámka:
Pokud serveru neřeknete, jaký prostředek plánujete volat, server pro tento prostředek neaktivuje zásady podmíněného přístupu. Pokud tedy chcete spustit mnohofaktorové ověřování, budete muset do adresy URL zahrnout prostředek.
Azure Active Directory (Azure AD) používá OAuth 2.0 k povolení přístupu k webovým aplikacím a webovým rozhraním API ve vašem tenantovi Azure AD. Tato příručka je nezávislá na jazyce a popisuje, jak odesílat a přijímat zprávy HTTP bez použití žádné z našich opensourcových knihoven.
Tok autorizačního kódu OAuth 2.0 je popsaný v části 4.1 specifikace OAuth 2.0. Používá se k ověřování a autorizaci ve většině typů aplikací, včetně webových aplikací a nativně nainstalovaných aplikací.
Registrujte aplikaci u svého tenantu AD
Nejprve zaregistrujte aplikaci v tenantovi Azure Active Directory (Azure AD). Tím získáte ID aplikace pro vaši aplikaci a umožníte mu přijímat tokeny.
Přihlaste se do Azure Portalu.
Vyberte svého tenanta Azure AD tím, že zvolíte svůj účet v pravém horním rohu stránky, poté zvolíte navigaci Přepnout adresář a vyberete příslušného tenanta.
- Tento krok přeskočte, pokud máte ve svém účtu jenom jednoho tenanta Azure AD nebo pokud jste už vybrali příslušného tenanta Azure AD.
Na webu Azure Portal vyhledejte a vyberte Azure Active Directory .
V levém menu Azure Active Directory vyberte možnost Registrace aplikacía poté vyberte Nová registrace.
Postupujte podle pokynů a vytvořte novou aplikaci. Nezáleží na tom, jestli se jedná o webovou aplikaci nebo veřejnou klientskou aplikaci (mobilní & desktopovou) pro účely tohoto kurzu, ale pokud chcete konkrétní příklady webových aplikací nebo veřejných klientských aplikací, podívejte se na naše rychlé starty.
- Název je název aplikace a popisuje aplikaci koncovým uživatelům.
- V části Podporované typy účtů vyberte Účty v libovolném adresáři organizace a osobních účtech Microsoft.
- Zadejte identifikátor URI přesměrování. U webových aplikací je to základní adresa URL vaší aplikace, kde se uživatelé můžou přihlásit. Například
http://localhost:12345. Pro veřejného klienta (mobilní & desktop) ji Azure AD používá k vrácení odpovědí na tokeny. Zadejte hodnotu specifickou pro vaši aplikaci. Napříkladhttp://MyFirstAADApp.
Po dokončení registrace přiřadí Azure AD vaší aplikaci jedinečný identifikátor klienta (ID aplikace ). Tuto hodnotu budete potřebovat v dalších částech, proto ji zkopírujte ze stránky aplikace.
Pokud chcete najít aplikaci na webu Azure Portal, vyberte registrace aplikacía pak vyberte Zobrazit všechny aplikace.
Proces autorizace OAuth 2.0
Na vysoké úrovni vypadá celý tok autorizace pro aplikaci přibližně takto:
Žádost o autorizační kód
Tok autorizačního kódu začíná klientem, který uživatele nasměruje na /authorize koncový bod. V tomto požadavku klient označuje oprávnění, která potřebuje získat od uživatele. Koncový bod autorizace OAuth 2.0 pro vašeho nájemce získáte tak, že v Azure Portal vyberete možnosti Registrace aplikací > Koncové body.
// Line breaks for legibility only
https://login.microsoftonline.com/{tenant}/oauth2/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%3A12345
&response_mode=query
&resource=https%3A%2F%2Fservice.contoso.com%2F
&state=12345
| Parametr | Typ | Popis |
|---|---|---|
| nájemník | povinné |
{tenant} Hodnotu v cestě požadavku můžete použít k řízení, kdo se může přihlásit k aplikaci. Povolené hodnoty jsou identifikátory tenantů, například 8eaef023-2b34-4da1-9baa-8bc8c9d6a490 nebo contoso.onmicrosoft.com nebo common pro tokeny nezávislé na tenantovi. |
| identifikátor klienta | povinné | ID aplikace přiřazené vaší aplikaci, když jste ho zaregistrovali ve službě Azure AD. Najdete ho na webu Azure Portal. Na bočním panelu služeb klikněte na Azure Active Directory, klikněte na Registrace aplikacía zvolte aplikaci. |
| typ_odezvy | povinné | Musí obsahovat tok autorizačního kódu code. |
| URI přesměrování (redirect_uri) | Doporučené | Redirect_uri vaší aplikace, kde může vaše aplikace odesílat a přijímat odpovědi na ověřování. Musí přesně odpovídat některému z redirect_uris, který jste zaregistrovali na portálu, s výjimkou toho, že musí být kódován adresou URL. Pro nativní & mobilních aplikací byste měli použít výchozí hodnotu https://login.microsoftonline.com/common/oauth2/nativeclient. |
| mód odezvy | volitelný | Určuje metodu, která se má použít k odeslání výsledného tokenu zpět do vaší aplikace. Může být query, fragmentnebo form_post.
query poskytuje kód jako parametr v řetězci dotazu na identifikátoru URI přesměrování. Pokud požadujete token ID pomocí implicitního toku, nemůžete použít query, jak je uvedeno ve specifikaci OpenID. Pokud požadujete pouze kód, můžete použít query, fragmentnebo form_post.
form_post provádí POST obsahující kód k vaší přesměrovací URI. Výchozí hodnota je query pro tok kódu. |
| stát | Doporučené | Hodnota zahrnutá v požadavku, která se také vrátí v odpovědi tokenu. Náhodně vygenerovaná jedinečná hodnota se obvykle používá k zabránění útokům typu CSRF (Cross-Site Request Forgery). Stav se také používá ke kódování informací o stavu uživatele v aplikaci před tím, než došlo k žádosti o ověření, jako je stránka nebo zobrazení, na které byli. |
| zdroj | Doporučeno | Identifikátor URI ID aplikace cíleného webového rozhraní API (zabezpečený zdroj). Pokud chcete najít identifikátor URI ID aplikace, klikněte na webu Azure Portal na Azure Active Directory, klikněte na Registrace aplikací, otevřete stránku nastavení aplikace a potom klikněte na Vlastnosti. Může to být také externí prostředek, jako je https://graph.microsoft.com. To se vyžaduje v jednom z požadavků na autorizaci nebo token. Chcete-li zajistit méně výzev k ověření, umístěte je do žádosti o autorizaci, abyste obdrželi souhlas od uživatele. |
| rozsah | ignorováno | Pro aplikace Azure AD verze 1 musí být obory staticky nakonfigurované na webu Azure Portal v části aplikace Nastavení, Požadovaná oprávnění. |
| výzva | volitelný | Uveďte typ interakce uživatele, který se vyžaduje. Platné hodnoty jsou: přihlášení: Uživatel by měl být vyzván k opětovnému ověření. select_account: Uživateli se zobrazí výzva k výběru účtu a přerušení jednotného přihlašování. Uživatel může vybrat existující přihlášený účet, zadat svoje přihlašovací údaje pro zapamatovaný účet nebo se rozhodnout použít úplně jiný účet. souhlas: Byl udělen souhlas uživatele, ale je potřeba ho aktualizovat. Uživateli by se měla zobrazit výzva k vyjádření souhlasu. admin_consent: Správce by měl být vyzván k vyjádření souhlasu jménem všech uživatelů v organizaci. |
| nápověda k přihlášení | volitelný | Dá se použít k předběžnému vyplnění pole uživatelské jméno a e-mailová adresa přihlašovací stránky pro uživatele, pokud znáte své uživatelské jméno předem. Aplikace často tento parametr používá při opětovném ověření, přičemž už dříve extrahovala uživatelské jméno z předchozího přihlášení pomocí nároku preferred_username. |
| nápověda pro doménu | volitelný | Poskytuje nápovědu k tenantovi nebo doméně, kterou by měl uživatel použít k přihlášení. Hodnota domain_hint je registrovaná doména pro tenanta. Pokud je tenant federován s místním adresářem, AAD přesměruje na zadaný federační server tenanta. |
| metoda_výzvy_kodu | Doporučené | Metoda používaná ke kódování code_verifier pro parametr code_challenge. Může to být jeden z plain nebo S256. Pokud je code_challenge vyloučeno, code_challenge předpokládá se, že se jedná o prostý text, pokud je zahrnutý. Azure AAD v1.0 podporuje plain i S256. Další informace najdete v dokumentu PKCE RFC. |
| programovací výzva | Doporučené | Slouží k zabezpečení autorizačního kódu prostřednictvím ověřovacího klíče pro výměnu kódu (PKCE) z nativního nebo veřejného klienta. Vyžaduje se, pokud code_challenge_method je zahrnuta. Další informace najdete v dokumentu PKCE RFC. |
Poznámka:
Pokud je uživatel součástí organizace, může správce organizace souhlasit nebo odmítnout jménem uživatele nebo mu povolit souhlas. Uživateli je udělena možnost souhlasu pouze tehdy, když ho správce povolí.
V tomto okamžiku se uživateli zobrazí výzva k zadání přihlašovacích údajů a vyjádření souhlasu s oprávněními požadovanými aplikací na webu Azure Portal. Jakmile se uživatel ověří a udělí souhlas, Azure AD pošle vaší aplikaci odpověď na redirect_uri adresu v požadavku s kódem.
Úspěšná odpověď
Úspěšná odpověď by mohla vypadat takto:
GET HTTP/1.1 302 Found
Location: http://localhost:12345/?code= AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrqqf_ZT_p5uEAEJJ_nZ3UmphWygRNy2C3jJ239gV_DBnZ2syeg95Ki-374WHUP-i3yIhv5i-7KU2CEoPXwURQp6IVYMw-DjAOzn7C3JCu5wpngXmbZKtJdWmiBzHpcO2aICJPu1KvJrDLDP20chJBXzVYJtkfjviLNNW7l7Y3ydcHDsBRKZc3GuMQanmcghXPyoDg41g8XbwPudVh7uCmUponBQpIhbuffFP_tbV8SNzsPoFz9CLpBCZagJVXeqWoYMPe2dSsPiLO9Alf_YIe5zpi-zY4C3aLw5g9at35eZTfNd0gBRpR5ojkMIcZZ6IgAA&session_state=7B29111D-C220-4263-99AB-6F6E135D75EF&state=D79E5777-702E-4260-9A62-37F75FF22CCE
| Parametr | Popis |
|---|---|
| souhlas správce | Hodnota True platí, pokud správce souhlasil s výzvou k žádosti o souhlas. |
| kód | Autorizační kód, který aplikace požadovala. Aplikace může použít autorizační kód k vyžádání přístupového tokenu pro cílový prostředek. |
| session_state | Aktuální uživatelskou relaci identifikuje jedinečná hodnota. Tato hodnota je GUID, ale měla by být považována za hodnotu, která je předána bez zkoumání. |
| stát | Pokud je v požadavku zahrnutý parametr stavu, měla by se v odpovědi zobrazit stejná hodnota. Je vhodné, aby aplikace před použitím odpovědi ověřila, že hodnoty stavu v požadavku a odpovědi jsou stejné. Toto pomáhá detekovat CSRF útoky (Cross-Site Request Forgery) proti klientovi. |
Chybová odpověď
Chybové odpovědi mohou být odeslány také do redirect_uri, aby je aplikace mohla správně zpracovat.
GET http://localhost:12345/?
error=access_denied
&error_description=the+user+canceled+the+authentication
| Parametr | Popis |
|---|---|
| chyba | Hodnota kódu chyby definovaná v části 5.2 OAuth 2.0 Authorization Framework. Následující tabulka popisuje kódy chyb, které Azure AD vrací. |
| popis chyby | Podrobnější popis chyby Tato zpráva není určená pro koncové uživatele. |
| stát | Hodnota stavu je náhodně vygenerovaná neopakovaná hodnota, která je odeslána v požadavku a vrácena v odpovědi, aby se zabránilo útokům csrF (cross-site request forgery). |
Kódy chyb pro chyby na koncovém bodu autorizace
Následující tabulka popisuje různé kódy chyb, které lze vrátit v error parametru chybové odpovědi.
| Kód chyby | Popis | Akce klienta |
|---|---|---|
| neplatný_požadavek | Chyba protokolu, například chybějící požadovaný parametr. | Opravte požadavek a odešlete ho znovu. Jedná se o chybu vývoje, která se obvykle chytí během počátečního testování. |
| neautorizovaný_klient | Klientská aplikace nemá oprávnění požadovat autorizační kód. | K tomu obvykle dochází v případě, že klientská aplikace není zaregistrovaná v Azure AD nebo není přidána do tenanta Azure AD uživatele. Aplikace může uživatele vyzvat k instalaci aplikace a jejímu přidání do Azure AD. |
| přístup odepřen | Vlastník prostředku zamítl souhlas | Klientská aplikace může uživatele upozornit, že nemůže pokračovat, pokud uživatel souhlasí. |
| nepodporovaný_typ_odezvy | Autorizační server nepodporuje typ odpovědi v požadavku. | Opravte požadavek a odešlete ho znovu. Jedná se o chybu vývoje, která se obvykle chytí během počátečního testování. |
| chyba serveru | Server zjistil neočekávanou chybu. | Zkuste požadavek zopakovat. Tyto chyby můžou mít za následek dočasné podmínky. Klientská aplikace může uživateli vysvětlit, že jeho odpověď je zpožděná kvůli dočasné chybě. |
| dočasně nedostupné | Server je dočasně příliš zaneprázdněný pro zpracování požadavku. | Zkuste požadavek zopakovat. Klientská aplikace může uživateli vysvětlit, že jeho odpověď je zpožděná kvůli dočasné podmínce. |
| neplatný zdroj | Cílový prostředek je neplatný, protože neexistuje, Azure AD ho nemůže najít nebo není správně nakonfigurovaný. | To značí, že prostředek, pokud existuje, nebyl v tenantovi nakonfigurován. Aplikace může uživatele vyzvat k instalaci aplikace a jejímu přidání do Azure AD. |
Použití autorizačního kódu k vyžádání přístupového tokenu
Teď, když jste získali autorizační kód a uživatel vám udělil oprávnění, můžete uplatnit kód pro získání přístupového tokenu k požadovanému prostředku zasláním POST požadavku na koncový bod /token.
// Line breaks for legibility only
POST /{tenant}/oauth2/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&client_id=2d4d11a2-f814-46a7-890a-274a72a7309e
&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrqqf_ZT_p5uEAEJJ_nZ3UmphWygRNy2C3jJ239gV_DBnZ2syeg95Ki-374WHUP-i3yIhv5i-7KU2CEoPXwURQp6IVYMw-DjAOzn7C3JCu5wpngXmbZKtJdWmiBzHpcO2aICJPu1KvJrDLDP20chJBXzVYJtkfjviLNNW7l7Y3ydcHDsBRKZc3GuMQanmcghXPyoDg41g8XbwPudVh7uCmUponBQpIhbuffFP_tbV8SNzsPoFz9CLpBCZagJVXeqWoYMPe2dSsPiLO9Alf_YIe5zpi-zY4C3aLw5g9at35eZTfNd0gBRpR5ojkMIcZZ6IgAA
&redirect_uri=https%3A%2F%2Flocalhost%3A12345
&resource=https%3A%2F%2Fservice.contoso.com%2F
&client_secret=p@ssw0rd
//NOTE: client_secret only required for web apps
Pokud chcete najít identifikátor URI ID aplikace, klikněte na webu Azure Portal na Azure Active Directory, klikněte na Registrace aplikací, otevřete stránku nastavení aplikace a potom klikněte na Vlastnosti.
Úspěšná odpověď
Azure AD vrátí přístupový token po úspěšné odpovědi. Aby se minimalizovala síťová volání z klientské aplikace a jejich přidružená latence, měla by klientská aplikace ukládat přístupové tokeny do mezipaměti po dobu životnosti tokenu, která je zadaná v odpovědi OAuth 2.0. K určení doby života tokenu použijte hodnoty parametrů expires_in nebo expires_on.
Pokud prostředek webového rozhraní API vrátí kód chyby invalid_token, může to znamenat, že prostředek zjistil, že platnost tokenu vypršela. Pokud se časy hodin klienta a prostředků liší (označuje se jako "časový rozdíl"), prostředek může považovat token za neplatný dříve, než je token odstraněn z mezipaměti klienta. Pokud k tomu dojde, vymažte token z mezipaměti, i když je stále v rámci své stanovené doby platnosti.
Úspěšná odpověď by mohla vypadat takto:
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1THdqcHdBSk9NOW4tQSJ9.eyJhdWQiOiJodHRwczovL3NlcnZpY2UuY29udG9zby5jb20vIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlLyIsImlhdCI6MTM4ODQ0MDg2MywibmJmIjoxMzg4NDQwODYzLCJleHAiOjEzODg0NDQ3NjMsInZlciI6IjEuMCIsInRpZCI6IjdmZTgxNDQ3LWRhNTctNDM4NS1iZWNiLTZkZTU3ZjIxNDc3ZSIsIm9pZCI6IjY4Mzg5YWUyLTYyZmEtNGIxOC05MWZlLTUzZGQxMDlkNzRmNSIsInVwbiI6ImZyYW5rbUBjb250b3NvLmNvbSIsInVuaXF1ZV9uYW1lIjoiZnJhbmttQGNvbnRvc28uY29tIiwic3ViIjoiZGVOcUlqOUlPRTlQV0pXYkhzZnRYdDJFYWJQVmwwQ2o4UUFtZWZSTFY5OCIsImZhbWlseV9uYW1lIjoiTWlsbGVyIiwiZ2l2ZW5fbmFtZSI6IkZyYW5rIiwiYXBwaWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJhcHBpZGFjciI6IjAiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJhY3IiOiIxIn0.JZw8jC0gptZxVC-7l5sFkdnJgP3_tRjeQEPgUn28XctVe3QqmheLZw7QVZDPCyGycDWBaqy7FLpSekET_BftDkewRhyHk9FW_KeEz0ch2c3i08NGNDbr6XYGVayNuSesYk5Aw_p3ICRlUV1bqEwk-Jkzs9EEkQg4hbefqJS6yS1HoV_2EsEhpd_wCQpxK89WPs3hLYZETRJtG5kvCCEOvSHXmDE6eTHGTnEgsIk--UlPe275Dvou4gEAwLofhLDQbMSjnlV5VLsjimNBVcSRFShoxmQwBJR_b2011Y5IuD6St5zPnzruBbZYkGNurQK63TJPWmRd3mbJsGM0mf3CUQ",
"token_type": "Bearer",
"expires_in": "3600",
"expires_on": "1388444763",
"resource": "https://service.contoso.com/",
"refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4rTfgV29ghDOHRc2B-C_hHeJaJICqjZ3mY2b_YNqmf9SoAylD1PycGCB90xzZeEDg6oBzOIPfYsbDWNf621pKo2Q3GGTHYlmNfwoc-OlrxK69hkha2CF12azM_NYhgO668yfcUl4VBbiSHZyd1NVZG5QTIOcbObu3qnLutbpadZGAxqjIbMkQ2bQS09fTrjMBtDE3D6kSMIodpCecoANon9b0LATkpitimVCrl-NyfN3oyG4ZCWu18M9-vEou4Sq-1oMDzExgAf61noxzkNiaTecM-Ve5cq6wHqYQjfV9DOz4lbceuYCAA",
"scope": "https%3A%2F%2Fgraph.microsoft.com%2Fmail.read",
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC83ZmU4MTQ0Ny1kYTU3LTQzODUtYmVjYi02ZGU1N2YyMTQ3N2UvIiwiaWF0IjoxMzg4NDQwODYzLCJuYmYiOjEzODg0NDA4NjMsImV4cCI6MTM4ODQ0NDc2MywidmVyIjoiMS4wIiwidGlkIjoiN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlIiwib2lkIjoiNjgzODlhZTItNjJmYS00YjE4LTkxZmUtNTNkZDEwOWQ3NGY1IiwidXBuIjoiZnJhbmttQGNvbnRvc28uY29tIiwidW5pcXVlX25hbWUiOiJmcmFua21AY29udG9zby5jb20iLCJzdWIiOiJKV3ZZZENXUGhobHBTMVpzZjd5WVV4U2hVd3RVbTV5elBtd18talgzZkhZIiwiZmFtaWx5X25hbWUiOiJNaWxsZXIiLCJnaXZlbl9uYW1lIjoiRnJhbmsifQ."
}
| Parametr | Popis |
|---|---|
| access_token (přístupový token) | Požadovaný přístupový token. Jedná se o neprůhledný řetězec – závisí na tom, co prostředek očekává, a není určený k tomu, aby to klient zkoumal. Aplikace může tento token použít k ověření zabezpečeného prostředku, jako je webové rozhraní API. |
| typ_tokenu | Označuje hodnotu typu tokenu. Jediným typem, který Azure AD podporuje, je Bearer. Další informace o nosných tokenech najdete v tématu OAuth2.0 Authorization Framework: Použití nosných tokenů (RFC 6750) |
| vyprší za | Jak dlouho je přístupový token platný (v sekundách). |
| vyprší dne | Č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. |
| zdroj | Identifikátor URI ID aplikace webového rozhraní API (zabezpečený prostředek). |
| rozsah | Oprávnění k impersonaci udělená klientské aplikaci Výchozí oprávnění je user_impersonation. Vlastník zabezpečeného prostředku může zaregistrovat další hodnoty ve službě Azure AD. |
| aktualizační_token | Obnovovací token OAuth 2.0 Aplikace může tento token použít k získání dalších přístupových tokenů po vypršení platnosti aktuálního přístupového tokenu. Obnovovací tokeny jsou dlouhodobé a lze je použít k zachování přístupu k prostředkům po delší dobu. |
| identifikační token | Nepodepsaný webový token JSON (JWT) představující token ID . Aplikace může dekódovat segmenty tohoto tokenu base64Url a požádat o informace o uživateli, který se přihlásil. Aplikace může hodnoty ukládat do mezipaměti a zobrazovat je, ale nemělo by se na ně spoléhat na žádné autorizační nebo bezpečnostní hranice. |
Další informace o JSON web tokenech najdete v návrhu specifikace IETF pro JWT. Další informace o id_tokensnajdete v v1.0 toku OpenID Connect.
Chybová odpověď
Chyby koncového bodu vystavení tokenu jsou kódy chyb HTTP, protože klient volá koncový bod vystavení tokenu přímo. Kromě stavového kódu HTTP koncový bod vystavení tokenu Azure AD vrátí také dokument JSON s objekty, které popisují chybu.
Ukázková chybová odpověď může vypadat takto:
{
"error": "invalid_grant",
"error_description": "AADSTS70002: Error validating credentials. AADSTS70008: The provided authorization code or refresh token is expired. Send a new interactive authorization request for this user and resource.\r\nTrace ID: 3939d04c-d7ba-42bf-9cb7-1e5854cdce9e\r\nCorrelation ID: a8125194-2dc8-4078-90ba-7b6592a7f231\r\nTimestamp: 2016-04-11 18:00:12Z",
"error_codes": [
70002,
70008
],
"timestamp": "2016-04-11 18:00:12Z",
"trace_id": "3939d04c-d7ba-42bf-9cb7-1e5854cdce9e",
"correlation_id": "a8125194-2dc8-4078-90ba-7b6592a7f231"
}
| Parametr | Popis |
|---|---|
| chyba | Řetězec kódu chyby, který lze použít ke klasifikaci typů chyb, ke kterým dochází, a lze jej použít k reakci na chyby. |
| popis chyby | Konkrétní chybová zpráva, která může vývojáři pomoct identifikovat původní příčinu chyby ověřování. |
| chybové_kódy | Seznam kódů chyb specifických pro stS, které můžou pomoct s diagnostikou. |
| časová značka | Čas, kdy k chybě došlo. |
| trace_id | Jedinečný identifikátor požadavku, který může pomoct s diagnostikou. |
| Identifikátor korelace (correlation_id) | Jedinečný identifikátor požadavku, který může pomoct s diagnostikou napříč komponentami. |
Stavové kódy HTTP
Následující tabulka uvádí stavové kódy HTTP, které koncový bod vystavení tokenu vrátí. V některých případech kód chyby stačí k popisu odpovědi, ale pokud dojde k chybám, budete muset parsovat doprovodný dokument JSON a prozkoumat jeho kód chyby.
| Kód HTTP | Popis |
|---|---|
| 400 | Výchozí kód HTTP. Používá se ve většině případů a typicky kvůli nesprávnému požadavku. Opravte požadavek a odešlete ho znovu. |
| 401 | Ověření se nezdařilo. Například v požadavku chybí parametr client_secret. |
| 403 | Autorizace se nezdařila. Uživatel například nemá oprávnění pro přístup k prostředku. |
| 500 | Ve službě došlo k vnitřní chybě. Zkuste požadavek zopakovat. |
Kódy chyb pro chyby koncového bodu tokenu
| Kód chyby | Popis | Akce klienta |
|---|---|---|
| neplatný_požadavek | Chyba protokolu, například chybějící požadovaný parametr. | Oprava a opětovné odeslání požadavku |
| neplatný_grant | Autorizační kód je neplatný nebo vypršela jeho platnost. | Vyzkoušejte nový požadavek na koncový bod /authorize |
| neautorizovaný_klient | Ověřený klient nemá oprávnění používat tento typ udělení autorizace. | K tomu obvykle dochází v případě, že klientská aplikace není zaregistrovaná v Azure AD nebo není přidána do tenanta Azure AD uživatele. Aplikace může uživatele vyzvat k instalaci aplikace a jejímu přidání do Azure AD. |
| neplatný_klient | Ověření klienta se nezdařilo. | Přihlašovací údaje klienta nejsou platné. Tento problém vyřešíte tak, že správce aplikace aktualizuje přihlašovací údaje. |
| nepodporovaný_typ_grantu | Autorizační server nepodporuje typ udělení autorizace. | Změňte typ grantu v žádosti. K tomuto typu chyby by mělo dojít pouze během vývoje a být zjištěn během počátečního testování. |
| neplatný zdroj | Cílový prostředek je neplatný, protože neexistuje, Azure AD ho nemůže najít nebo není správně nakonfigurovaný. | To značí, že prostředek, pokud existuje, nebyl v tenantovi nakonfigurován. Aplikace může uživatele vyzvat k instalaci aplikace a jejímu přidání do Azure AD. |
| vyžadována interakce | Požadavek vyžaduje interakci uživatele. Vyžaduje se například další krok ověřování. | Místo neinteraktivního požadavku zkuste znovu použít interaktivní žádost o autorizaci pro stejný prostředek. |
| dočasně nedostupné | Server je dočasně příliš zaneprázdněný pro zpracování požadavku. | Zkuste požadavek zopakovat. Klientská aplikace může uživateli vysvětlit, že jeho odpověď je zpožděná kvůli dočasné podmínce. |
Použití přístupového tokenu pro přístup k prostředku
Teď, když jste úspěšně získali access_token, můžete token použít v požadavcích na webová rozhraní API tak, že ho zahrnete do hlavičky Authorization. Specifikace RFC 6750 vysvětluje, jak používat nosné tokeny v požadavcích HTTP pro přístup k chráněným prostředkům.
Ukázkový požadavek
GET /data HTTP/1.1
Host: service.contoso.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1THdqcHdBSk9NOW4tQSJ9.eyJhdWQiOiJodHRwczovL3NlcnZpY2UuY29udG9zby5jb20vIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlLyIsImlhdCI6MTM4ODQ0MDg2MywibmJmIjoxMzg4NDQwODYzLCJleHAiOjEzODg0NDQ3NjMsInZlciI6IjEuMCIsInRpZCI6IjdmZTgxNDQ3LWRhNTctNDM4NS1iZWNiLTZkZTU3ZjIxNDc3ZSIsIm9pZCI6IjY4Mzg5YWUyLTYyZmEtNGIxOC05MWZlLTUzZGQxMDlkNzRmNSIsInVwbiI6ImZyYW5rbUBjb250b3NvLmNvbSIsInVuaXF1ZV9uYW1lIjoiZnJhbmttQGNvbnRvc28uY29tIiwic3ViIjoiZGVOcUlqOUlPRTlQV0pXYkhzZnRYdDJFYWJQVmwwQ2o4UUFtZWZSTFY5OCIsImZhbWlseV9uYW1lIjoiTWlsbGVyIiwiZ2l2ZW5fbmFtZSI6IkZyYW5rIiwiYXBwaWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJhcHBpZGFjciI6IjAiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJhY3IiOiIxIn0.JZw8jC0gptZxVC-7l5sFkdnJgP3_tRjeQEPgUn28XctVe3QqmheLZw7QVZDPCyGycDWBaqy7FLpSekET_BftDkewRhyHk9FW_KeEz0ch2c3i08NGNDbr6XYGVayNuSesYk5Aw_p3ICRlUV1bqEwk-Jkzs9EEkQg4hbefqJS6yS1HoV_2EsEhpd_wCQpxK89WPs3hLYZETRJtG5kvCCEOvSHXmDE6eTHGTnEgsIk--UlPe275Dvou4gEAwLofhLDQbMSjnlV5VLsjimNBVcSRFShoxmQwBJR_b2011Y5IuD6St5zPnzruBbZYkGNurQK63TJPWmRd3mbJsGM0mf3CUQ
Odpověď na chybu
Zabezpečené prostředky, které implementují RFC 6750, vydávají stavové kódy HTTP. Pokud požadavek neobsahuje ověřovací přihlašovací údaje nebo chybí token, odpověď obsahuje hlavičku WWW-Authenticate. Když požadavek selže, server prostředků odpoví stavovým kódem HTTP a kódem chyby.
Následuje příklad neúspěšné odpovědi, pokud požadavek klienta neobsahuje nosný token:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer authorization_uri="https://login.microsoftonline.com/contoso.com/oauth2/authorize", error="invalid_token", error_description="The access token is missing.",
Parametry chyby
| Parametr | Popis |
|---|---|
| authorization_uri | Identifikátor URI (fyzický koncový bod) autorizačního serveru. Tato hodnota se také používá jako vyhledávací klíč k získání dalších informací o serveru z koncového bodu zjišťování. Klient musí ověřit, jestli je autorizační server důvěryhodný. Pokud je prostředek chráněný službou Azure AD, stačí ověřit, že adresa URL začíná |
| chyba | Hodnota kódu chyby definovaná v části 5.2 OAuth 2.0 Authorization Framework. |
| popis chyby | Podrobnější popis chyby Tato zpráva není určená pro koncové uživatele. |
| identifikátor_zdroje | Vrátí jedinečný identifikátor prostředku. Klientská aplikace může tento identifikátor použít jako hodnotu parametru resource, když požádá o token prostředku. Je důležité, aby klientská aplikace tuto hodnotu ověřila, jinak může být škodlivá služba schopná vyvolat zvýšení oprávnění útoku. Doporučenou strategií pro zabránění útoku je ověřit, že |
Chybové kódy schématu nosiče
Specifikace RFC 6750 definuje následující chyby pro prostředky, které v odpovědi používají hlavičku WWW-Authenticate a schéma nositele.
| Stavový kód HTTP | Kód chyby | Popis | Akce klienta |
|---|---|---|---|
| 400 | neplatný_požadavek | Požadavek není správně vytvořený. Může například chybět parametr nebo použít stejný parametr dvakrát. | Opravte chybu a zkuste požadavek zopakovat. Tento typ chyby by měl nastat pouze během vývoje a měl by být zjištěn při počátečním testování. |
| 401 | neplatný token | Přístupový token chybí, je neplatný nebo je odvolán. Hodnota parametru error_description poskytuje další podrobnosti. | Požádejte o nový token z autorizačního serveru. Pokud nový token selže, došlo k neočekávané chybě. Odešle uživateli chybovou zprávu a zkuste to znovu po náhodných zpožděních. |
| 403 | nedostatečný rozsah | Přístupový token neobsahuje oprávnění zosobnění požadovaná pro přístup k prostředku. | Odešlete do koncového bodu autorizace novou žádost o autorizaci. Pokud odpověď obsahuje parametr oboru, použijte hodnotu oboru v požadavku na prostředek. |
| 403 | nedostatečný_přístup | Předmět tokenu nemá oprávnění požadovaná pro přístup k prostředku. | Požádejte uživatele, aby použil jiný účet nebo požádal o oprávnění k zadanému prostředku. |
Aktualizace přístupových tokenů
Přístupové tokeny jsou krátkodobé a po vypršení jejich platnosti je nutné je aktualizovat, aby se mohly dál přistupovat k prostředkům.
access_token můžete aktualizovat odesláním dalšího požadavku POST do koncového bodu /token, ale tentokrát poskytnete refresh_token místo code. Obnovovací tokeny jsou platné pro všechny prostředky, ke kterým už má váš klient udělen souhlas , a proto je možné použít obnovovací token vydaný na žádost o resource=https://graph.microsoft.com k vyžádání nového přístupového tokenu pro resource=https://contoso.com/api.
Obnovovací tokeny nemají zadané životnosti. Životnost obnovovacích tokenů je obvykle poměrně dlouhá. V některých případech však vyprší platnost obnovovacích tokenů, jsou odvolány nebo nemají dostatečná oprávnění pro požadovanou akci. Vaše aplikace potřebuje správně očekávat a zpracovat chyby vrácené koncovým bodem vystavení tokenu.
Když obdržíte odpověď s chybou obnovovacího tokenu, zahoďte aktuální obnovovací token a požádejte o nový autorizační kód nebo přístupový token. Zejména při použití obnovovacího tokenu v toku udělení autorizačního kódu, pokud obdržíte odpověď s kódy chyb interaction_required nebo invalid_grant, zahoďte obnovovací token a požádejte o nový autorizační kód.
Ukázkový požadavek na koncový bod specifický pro tenanta (je možné použít i společný koncový bod ) k získání nového přístupového tokenu pomocí obnovovacího tokenu může vypadat například takto:
// Line breaks for legibility only
POST /{tenant}/oauth2/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&refresh_token=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq...
&grant_type=refresh_token
&resource=https%3A%2F%2Fservice.contoso.com%2F
&client_secret=JqQX2PNo9bpM0uEihUPzyrh // NOTE: Only required for web apps
Úspěšná odpověď
Úspěšná odpověď tokenu bude vypadat takto:
{
"token_type": "Bearer",
"expires_in": "3600",
"expires_on": "1460404526",
"resource": "https://service.contoso.com/",
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1THdqcHdBSk9NOW4tQSJ9.eyJhdWQiOiJodHRwczovL3NlcnZpY2UuY29udG9zby5jb20vIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlLyIsImlhdCI6MTM4ODQ0MDg2MywibmJmIjoxMzg4NDQwODYzLCJleHAiOjEzODg0NDQ3NjMsInZlciI6IjEuMCIsInRpZCI6IjdmZTgxNDQ3LWRhNTctNDM4NS1iZWNiLTZkZTU3ZjIxNDc3ZSIsIm9pZCI6IjY4Mzg5YWUyLTYyZmEtNGIxOC05MWZlLTUzZGQxMDlkNzRmNSIsInVwbiI6ImZyYW5rbUBjb250b3NvLmNvbSIsInVuaXF1ZV9uYW1lIjoiZnJhbmttQGNvbnRvc28uY29tIiwic3ViIjoiZGVOcUlqOUlPRTlQV0pXYkhzZnRYdDJFYWJQVmwwQ2o4UUFtZWZSTFY5OCIsImZhbWlseV9uYW1lIjoiTWlsbGVyIiwiZ2l2ZW5fbmFtZSI6IkZyYW5rIiwiYXBwaWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJhcHBpZGFjciI6IjAiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJhY3IiOiIxIn0.JZw8jC0gptZxVC-7l5sFkdnJgP3_tRjeQEPgUn28XctVe3QqmheLZw7QVZDPCyGycDWBaqy7FLpSekET_BftDkewRhyHk9FW_KeEz0ch2c3i08NGNDbr6XYGVayNuSesYk5Aw_p3ICRlUV1bqEwk-Jkzs9EEkQg4hbefqJS6yS1HoV_2EsEhpd_wCQpxK89WPs3hLYZETRJtG5kvCCEOvSHXmDE6eTHGTnEgsIk--UlPe275Dvou4gEAwLofhLDQbMSjnlV5VLsjimNBVcSRFShoxmQwBJR_b2011Y5IuD6St5zPnzruBbZYkGNurQK63TJPWmRd3mbJsGM0mf3CUQ",
"refresh_token": "AwABAAAAv YNqmf9SoAylD1PycGCB90xzZeEDg6oBzOIPfYsbDWNf621pKo2Q3GGTHYlmNfwoc-OlrxK69hkha2CF12azM_NYhgO668yfcUl4VBbiSHZyd1NVZG5QTIOcbObu3qnLutbpadZGAxqjIbMkQ2bQS09fTrjMBtDE3D6kSMIodpCecoANon9b0LATkpitimVCrl PM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4rTfgV29ghDOHRc2B-C_hHeJaJICqjZ3mY2b_YNqmf9SoAylD1PycGCB90xzZeEDg6oBzOIPfYsbDWNf621pKo2Q3GGTHYlmNfwoc-OlrxK69hkha2CF12azM_NYhgO668yfmVCrl-NyfN3oyG4ZCWu18M9-vEou4Sq-1oMDzExgAf61noxzkNiaTecM-Ve5cq6wHqYQjfV9DOz4lbceuYCAA"
}
| Parametr | Popis |
|---|---|
| typ_tokenu | Typ tokenu. Jediná podporovaná hodnota je bearer. |
| vyprší za | Zbývající životnost tokenu v sekundách. Typická hodnota je 3600 (jedna hodina). |
| vyprší dne | Datum a čas vypršení platnosti tokenu. Datum je reprezentováno jako počet sekund od 1970-01-01T0:0:0Z UTC do doby vypršení platnosti. |
| zdroj | Identifikuje zabezpečený prostředek, ke kterému se dá přístupový token použít pro přístup. |
| rozsah | Oprávnění k zosobnění udělená nativní klientské aplikaci Výchozí oprávnění je user_impersonation. Vlastník cílového prostředku může zaregistrovat alternativní hodnoty ve službě Azure AD. |
| access_token (přístupový token) | Nový přístupový token, který byl požadován. |
| aktualizační_token | Nový refresh_token OAuth 2.0, který se dá použít k vyžádání nových přístupových tokenů, když platnost tokenu v této odpovědi vyprší. |
Chybová odpověď
Ukázková chybová odpověď může vypadat takto:
{
"error": "invalid_resource",
"error_description": "AADSTS50001: The application named https://foo.microsoft.com/mail.read was not found in the tenant named 295e01fc-0c56-4ac3-ac57-5d0ed568f872. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You might have sent your authentication request to the wrong tenant.\r\nTrace ID: ef1f89f6-a14f-49de-9868-61bd4072f0a9\r\nCorrelation ID: b6908274-2c58-4e91-aea9-1f6b9c99347c\r\nTimestamp: 2016-04-11 18:59:01Z",
"error_codes": [
50001
],
"timestamp": "2016-04-11 18:59:01Z",
"trace_id": "ef1f89f6-a14f-49de-9868-61bd4072f0a9",
"correlation_id": "b6908274-2c58-4e91-aea9-1f6b9c99347c"
}
| Parametr | Popis |
|---|---|
| chyba | Řetězec kódu chyby, který lze použít ke klasifikaci typů chyb, ke kterým dochází, a lze jej použít k reakci na chyby. |
| popis chyby | Konkrétní chybová zpráva, která může vývojáři pomoct identifikovat původní příčinu chyby ověřování. |
| chybové_kódy | Seznam kódů chyb specifických pro stS, které můžou pomoct s diagnostikou. |
| časová značka | Čas, kdy k chybě došlo. |
| trace_id | Jedinečný identifikátor požadavku, který může pomoct s diagnostikou. |
| Identifikátor korelace (correlation_id) | Jedinečný identifikátor požadavku, který může pomoct s diagnostikou napříč komponentami. |
Popis kódů chyb a doporučené akce klienta najdete v části Kódy chyb pro chyby koncového bodu tokenu.
Další kroky
Další informace o koncovém bodu Azure AD v1.0 a o tom, jak přidat ověřování a autorizaci do webových aplikací a webových API, najdete v ukázkových aplikacích .