Sdílet prostřednictvím


Autorizace přístupu k webovým aplikacím Azure Active Directory pomocí toku udělení kódu OAuth 2.0

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.

  1. Přihlaste se do Azure Portalu.

  2. 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.
  3. Na webu Azure Portal vyhledejte a vyberte Azure Active Directory .

  4. V levém menu Azure Active Directory vyberte možnost Registrace aplikacía poté vyberte Nová registrace.

  5. 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říklad http://MyFirstAADApp.
  6. 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.

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

OAuth autorizační kódový tok

Žá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
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 v Azure AD. Najdete ho na webu Azure Portal. ID aplikace se zobrazí v nastavení registrace aplikace.
typ_grantu povinné Musí být authorization_code pro tok autorizačního kódu.
kód povinné authorization_code, kterou jste získali v předchozí sekci
URI přesměrování (redirect_uri) povinné Zaregistrovalo se redirect_uriv klientské aplikaci.
klientské_tajemství vyžadováno pro webové aplikace, není povoleno pro veřejné klienty Tajný kód aplikace, který jste vytvořili v portálu Azure pro vaši aplikaci v části Klíče. Nejde ho použít v nativní aplikaci (veřejném klientovi), protože client_secrets nelze spolehlivě ukládat na zařízeních. Vyžaduje se pro webové aplikace a webová rozhraní API (všichni důvěrní klienti), kteří mají možnost bezpečně ukládat client_secret na straně serveru. Před odesláním by měl být client_secret kódován adresou URL.
zdroj Doporučené 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. V žádosti o autorizaci i v žádosti o token se musí parametry prostředku shodovat.
ověřovač_kódu volitelný Stejný code_verifier, který byl použit k získání authorization_code. Vyžaduje se, pokud byl PKCE použit v žádosti o udělení autorizačního kódu. Další informace najdete v RFC PKCE .

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á https://login.microsoftonline.com nebo jiným názvem hostitele, který Azure AD podporuje. Prostředek specifický pro tenanta by měl vždy vrátit autorizovanou URI konkrétního tenanta.

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 resource_id odpovídá základu adresy URL webového rozhraní API, ke které se přistupuje. Pokud se například přistupuje k https://service.contoso.com/data, může být resource_idhttps://service.contoso.com/. Klientská aplikace musí odmítnout resource_id, která nezačíná základní adresou URL, pokud neexistuje spolehlivý alternativní způsob ověření ID.

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 .