Přehled tokenů v Azure Active Directory B2C

Azure Active Directory B2C (Azure AD B2C) při zpracování jednotlivých toků ověřování generuje různé typy tokenů zabezpečení. Tento článek popisuje formát, charakteristiky zabezpečení a obsah jednotlivých typů tokenů.

Typy tokenů

Azure AD B2C podporuje protokoly OAuth 2.0 a OpenID Connect, které využívají tokeny k ověřování a zabezpečenému přístupu k prostředkům. Všechny tokeny používané v Azure AD B2C jsou webové tokeny JSON (JWT), které obsahují kontrolní výrazy informací o nosiči a předmětu tokenu.

Při komunikaci s Azure AD B2C se používají následující tokeny:

  • Token ID – JWT obsahující deklarace identity, které můžete použít k identifikaci uživatelů ve vaší aplikaci. Tento token se bezpečně odesílá v požadavcích HTTP pro komunikaci mezi dvěma komponentami stejné aplikace nebo služby. Deklarace identity můžete použít v tokenu ID podle potřeby. Běžně se používají k zobrazení informací o účtu nebo k rozhodování o řízení přístupu v aplikaci. Tokeny ID vydané Azure AD B2C jsou podepsané, ale nejsou šifrované. Když vaše aplikace nebo rozhraní API obdrží token ID, musí ověřit podpis, aby bylo možné prokázat, že token je autentický. Vaše aplikace nebo rozhraní API musí také ověřit několik deklarací identity v tokenu, aby bylo možné prokázat, že je platný. V závislosti na požadavcích scénáře se deklarace identity ověřované aplikací můžou lišit, ale vaše aplikace musí v každém scénáři provádět několik běžných ověření deklarací identity.

  • Přístupový token – JWT obsahující deklarace identity, které můžete použít k identifikaci udělených oprávnění k vašim rozhraním API. Přístupové tokeny jsou podepsané, ale nejsou šifrované. Přístupové tokeny slouží k poskytování přístupu k rozhraním API a serverům prostředků. Když rozhraní API obdrží přístupový token, musí ověřit podpis, aby prokázalo, že je token autentický. Vaše rozhraní API musí také ověřit několik deklarací identity v tokenu, aby prokázalo jeho platnost. V závislosti na požadavcích scénáře se deklarace identity ověřované aplikací můžou lišit, ale vaše aplikace musí v každém scénáři provádět několik běžných ověření deklarací identity.

  • Obnovovací token – obnovovací tokeny se používají k získání nových tokenů ID a přístupových tokenů v toku OAuth 2.0. Poskytují vaší aplikaci dlouhodobý přístup k prostředkům jménem uživatelů bez nutnosti interakce s těmito uživateli. Obnovovací tokeny jsou pro vaši aplikaci neprůžné. Vydává je Azure AD B2C a může je kontrolovat a interpretovat pouze Azure AD B2C. Jsou dlouhodobé, ale vaše aplikace by neměla být napsána s očekáváním, že obnovovací token bude trvat po určitou dobu. Obnovovací tokeny je možné kdykoli zrušit z různých důvodů. Jediným způsobem, jak může vaše aplikace zjistit, jestli je obnovovací token platný, je pokusit se ho uplatnit provedením žádosti o token pro Azure AD B2C. Když uplatníte obnovovací token pro nový token, obdržíte v odpovědi tokenu nový obnovovací token. Uložte nový obnovovací token. Nahrazuje obnovovací token, který jste dříve použili v požadavku. Tato akce pomáhá zaručit, že vaše obnovovací tokeny zůstanou co nejdéle platné. Jednostránkové aplikace používající tok autorizačního kódu s PKCE mají vždy životnost obnovovacího tokenu 24 hodin. Přečtěte si další informace o dopadech obnovovacích tokenů na zabezpečení v prohlížeči.

Koncové body

Registrovaná aplikace přijímá tokeny a komunikuje s Azure AD B2C odesíláním požadavků do těchto koncových bodů:

  • https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/oauth2/v2.0/authorize
  • https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/oauth2/v2.0/token

Tokeny zabezpečení, které aplikace obdrží od Azure AD B2C, můžou pocházet z /authorize koncových bodů nebo /token . Při získání tokenů ID z:

  • /authorize se provádí pomocí implicitního toku, který se často používá pro přihlašování uživatelů k webovým aplikacím založeným na JavaScriptu. Pokud ale vaše aplikace používá MSAL.js 2.0 nebo novější, nepovolujte implicitní udělení toku v registraci aplikace, protože MSAL.js 2.0 nebo novější podporuje tok autorizačního kódu s PKCE.
  • /token se provádí pomocí toku autorizačního kódu, který udržuje token před prohlížečem skrytý.

Deklarace identit

Při použití Azure AD B2C máte přesnou kontrolu nad obsahem tokenů. Můžete nakonfigurovat toky uživatelů a vlastní zásady tak, aby odesílaly určité sady uživatelských dat v deklarací identity, které jsou pro vaši aplikaci potřeba. Tyto deklarace identity můžou zahrnovat standardní vlastnosti, jako je displayName a emailAddress. Vaše aplikace můžou tyto deklarace identity používat k bezpečnému ověřování uživatelů a požadavků.

Deklarace identity v tokenech ID se nevrací v žádném konkrétním pořadí. V tokenech ID je možné kdykoli zavést nové deklarace identity. Při zavádění nových deklarací identity by se vaše aplikace neměla přerušit. Do deklarací identity můžete také zahrnout vlastní atributy uživatelů .

Následující tabulka uvádí deklarace identity, které můžete očekávat v tokenech ID a přístupových tokenech vystavených Azure AD B2C.

Name Deklarovat Příklad hodnoty Description
Cílová skupina aud 90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 Identifikuje zamýšleného příjemce tokenu. Pro Azure AD B2C je cílovou skupinou ID aplikace. Vaše aplikace by měla tuto hodnotu ověřit, a pokud se neshoduje, token odmítnout. Cílová skupina je synonymem pro prostředek.
Vystavitel iss https://<tenant-name>.b2clogin.com/775527ff-9a37-4307-8b3d-cc311f58d925/v2.0/ Identifikuje službu tokenů zabezpečení (STS), která token sestaví a vrátí. Identifikuje také adresář, ve kterém byl uživatel ověřen. Vaše aplikace by měla ověřit deklaraci identity vystavitele, aby se ujistila, že token pochází z příslušného koncového bodu.
Vystaveno v iat 1438535543 Čas, kdy byl token vydán, vyjádřený v epoché době.
Čas vypršení platnosti exp 1438539443 Čas, kdy se token stane neplatným, vyjádřený v epochovém čase. Vaše aplikace by tuto deklaraci identity měla použít k ověření platnosti životnosti tokenu.
Není před nbf 1438535543 Čas, kdy se token stane platným, vyjádřený v epoché době. Tato doba je obvykle stejná jako čas vydání tokenu. Vaše aplikace by tuto deklaraci identity měla použít k ověření platnosti životnosti tokenu.
Verze ver 1.0 Verze tokenu ID definovaná Azure AD B2C.
Hodnota hash kódu c_hash SGCPtt01wxwfgnYZy2VJtQ Hodnota hash kódu zahrnutá v tokenu ID pouze v případech, kdy je token vystaven společně s autorizačním kódem OAuth 2.0. Hodnota hash kódu se dá použít k ověření pravosti autorizačního kódu. Další informace o tom, jak toto ověření provést, najdete ve specifikaci OpenID Connect.
Hodnota hash přístupových tokenů at_hash SGCPtt01wxwfgnYZy2VJtQ Hodnota hash přístupového tokenu, která je součástí tokenu ID, pouze pokud je token vystaven společně s přístupovým tokenem OAuth 2.0. K ověření pravosti přístupového tokenu lze použít hodnotu hash přístupového tokenu. Další informace o tom, jak provést toto ověření, najdete ve specifikaci OpenID Connect.
Nonce nonce 12345 Nonce je strategie, která se používá ke zmírnění útoků na přehrání tokenů. Vaše aplikace může zadat nonce v autorizační žádosti pomocí parametru nonce dotazu. Hodnota, kterou zadáte v požadavku, se vygeneruje beze změny pouze v nonce deklaraci identity tokenu ID. Tato deklarace identity umožňuje vaší aplikaci ověřit hodnotu proti hodnotě zadané v požadavku. Vaše aplikace by měla toto ověření provést během procesu ověření tokenu ID.
Předmět sub 884408e1-2918-4cz0-b12d-3aa027d7563b Objekt zabezpečení, o kterém token uplatňuje informace, například uživatel aplikace. Tato hodnota je neměnná a nelze ji znovu přiřadit ani znovu použít. Dá se použít k bezpečnému provádění autorizačních kontrol, například při použití tokenu pro přístup k prostředku. Ve výchozím nastavení se deklarace subjektu vyplní ID objektu uživatele v adresáři.
Referenční informace o třídě kontextu ověřování acr Nelze použít Používá se jenom se staršími zásadami.
Zásady architektury důvěryhodnosti tfp b2c_1_signupsignin1 Název zásady, která se použila k získání tokenu ID.
Čas ověřování auth_time 1438535543 Čas, kdy uživatel naposledy zadal přihlašovací údaje, vyjádřený v epoché době. Neexistuje žádný rozdíl mezi tím, že ověřování je nové přihlášení, relace jednotného přihlašování (SSO) nebo jiný typ přihlášení. Je auth_time poslední čas, kdy aplikace (nebo uživatel) zahájil pokus o ověření Azure AD B2C. Metoda použitá k ověření se nerozlišuje.
Obor scp Read Oprávnění udělená prostředku pro přístupový token Více udělených oprávnění je odděleno mezerou.
Autorizovaná strana azp 975251ed-e4f5-4efd-abcb-5f1a8f566ab7 ID aplikace klientské aplikace, která žádost iniciovala.

Konfigurace

Následující vlastnosti slouží ke správě životností tokenů zabezpečení generovaných Azure AD B2C:

  • Přístup & Životnost tokenu ID (minuty) – životnost nosného tokenu OAuth 2.0 použitého k získání přístupu k chráněnému prostředku. Výchozí hodnota je 60 minut. Minimální hodnota (včetně) je 5 minut. Maximální hodnota (včetně) je 1440 minut.

  • Životnost obnovovacího tokenu (dny) – maximální časové období, před kterým je možné použít obnovovací token k získání nového přístupového tokenu nebo tokenu ID. Časové období zahrnuje také získání nového obnovovacího tokenu, pokud má vaše aplikace udělený offline_access obor. Výchozí hodnota je 14 dní. Minimální hodnota (včetně) je jeden den. Maximální hodnota (včetně) je 90 dní.

  • Doba životnosti posuvného okna tokenu aktualizace (dny) – Po uplynutí tohoto časového období je uživatel nucen znovu provést ověření bez ohledu na dobu platnosti posledního obnovovacího tokenu získaného aplikací. Je možné ji zadat pouze v případě, že je přepínač nastavený na Ohraničeno. Musí být větší než nebo rovna hodnotě Životnost tokenu aktualizace (dny). Pokud je přepínač nastavený na Bez vypršení platnosti, nemůžete zadat konkrétní hodnotu. Výchozí hodnota je 90 dnů. Minimální hodnota (včetně) je jeden den. Maximální hodnota (včetně) je 365 dní.

Následující případy použití jsou povoleny pomocí těchto vlastností:

  • Umožňuje uživateli zůstat přihlášený k mobilní aplikaci po neomezenou dobu, pokud je v aplikaci neustále aktivní. V toku uživatele přihlašování můžete nastavit dobu životnosti posuvného okna pro obnovení tokenu (dny) na Bez vypršení platnosti .
  • Nastavte odpovídající životnost přístupových tokenů a splňte požadavky vašeho odvětví na zabezpečení a dodržování předpisů.

Tato nastavení nejsou dostupná pro toky uživatelů pro resetování hesla.

Kompatibilita

Ke správě kompatibility tokenů se používají následující vlastnosti:

  • Deklarace identity vystavitele (iss) – Tato vlastnost identifikuje tenanta Azure AD B2C, který token vystavil. Výchozí hodnota je https://<domain>/{B2C tenant GUID}/v2.0/. Hodnota https://<domain>/tfp/{B2C tenant GUID}/{Policy ID}/v2.0/ zahrnuje ID tenanta Azure AD B2C i toku uživatele, který byl použit v žádosti o token. Pokud vaše aplikace nebo knihovna potřebuje Azure AD B2C, aby vyhovovala specifikaci OpenID Connect Discovery 1.0, použijte tuto hodnotu.

  • Deklarace subjektu (sub) – Tato vlastnost identifikuje entitu, pro kterou token uplatňuje informace. Výchozí hodnota je ObjectID, která naplní sub deklaraci identity v tokenu ID objektu uživatele. Hodnota Nepodporováno je poskytována pouze pro zpětnou kompatibilitu. Doporučujeme přepnout na ObjectID , jakmile to bude možné.

  • Deklarace identity představující ID zásady – Tato vlastnost identifikuje typ deklarace identity, do kterého se vyplní název zásady použitý v požadavku na token. Výchozí hodnota je tfp. Hodnota je acr poskytována pouze pro zpětnou kompatibilitu.

Průchod

Po zahájení cesty uživatele obdrží Azure AD B2C přístupový token od zprostředkovatele identity. Azure AD B2C používá tento token k načtení informací o uživateli. V toku uživatele povolíte deklaraci identity tak, aby předávala token aplikacím, které zaregistrujete v Azure AD B2C. Vaše aplikace musí používat doporučený tok uživatele , aby využila výhod předání tokenu jako deklarace identity.

Azure AD B2C v současné době podporuje pouze předávání přístupového tokenu zprostředkovatelů identity OAuth 2.0, mezi které patří Facebook a Google. U všech ostatních zprostředkovatelů identity se deklarace identity vrátí prázdná.

Ověřování

K ověření tokenu by vaše aplikace měla zkontrolovat podpis i deklarace identity tokenu. V závislosti na preferovaném jazyce je pro ověřování uzlů JWT k dispozici mnoho opensourcových knihoven. Doporučujeme, abyste tyto možnosti prozkoumali a neimplementovali vlastní logiku ověřování.

Ověření podpisu

JWT obsahuje tři segmenty, záhlaví, tělo a podpis. Segment podpisu lze použít k ověření pravosti tokenu, aby mu vaše aplikace mohla důvěřovat. Azure AD tokeny B2C se podepisují pomocí standardních asymetrických šifrovacích algoritmů, jako je RSA 256.

Hlavička tokenu obsahuje informace o klíči a šifrovací metodě použité k podepsání tokenu:

{
        "typ": "JWT",
        "alg": "RS256",
        "kid": "GvnPApfWMdLRi8PDmisFn7bprKg"
}

Hodnota deklarace identity alg je algoritmus, který byl použit k podepsání tokenu. Hodnota deklarace identity dítěte je veřejný klíč, který byl použit k podepsání tokenu. V každém okamžiku může Azure AD B2C podepsat token pomocí libovolné sady párů veřejného a privátního klíče. Azure AD B2C pravidelně obměňuje možnou sadu klíčů. Vaše aplikace by měla být napsaná tak, aby tyto změny klíčů zpracovávala automaticky. Rozumná frekvence kontroly aktualizací veřejných klíčů používaných Azure AD B2C je každých 24 hodin. Aby bylo možné zpracovat neočekávané změny klíčů, měla by být vaše aplikace zapsána tak, aby znovu načetla veřejné klíče, pokud obdrží neočekávanou hodnotu dítěte .

Azure AD B2C má koncový bod metadat OpenID Connect. Pomocí tohoto koncového bodu můžou aplikace požadovat informace o Azure AD B2C za běhu. Tyto informace zahrnují koncové body, obsah tokenů a podpisové klíče tokenů. Váš tenant Azure AD B2C obsahuje dokument metadat JSON pro každou zásadu. Dokument metadat je objekt JSON, který obsahuje několik užitečných informací. Metadata obsahují jwks_uri, které poskytují umístění sady veřejných klíčů, které se používají k podepisování tokenů. Toto umístění je zde uvedené, ale nejlepší je načíst ho dynamicky pomocí dokumentu s metadaty a parsováním jwks_uri:

https://contoso.b2clogin.com/contoso.onmicrosoft.com/b2c_1_signupsignin1/discovery/v2.0/keys

Dokument JSON umístěný na této adrese URL obsahuje všechny informace o veřejném klíči, které se používají v určitém okamžiku. Vaše aplikace může pomocí kid deklarace identity v hlavičce JWT vybrat veřejný klíč v dokumentu JSON, který se používá k podepsání konkrétního tokenu. Pak může provést ověření podpisu pomocí správného veřejného klíče a uvedeného algoritmu.

Dokument metadat pro zásadu B2C_1_signupsignin1 v tenantovi contoso.onmicrosoft.com se nachází tady:

https://contoso.b2clogin.com/contoso.onmicrosoft.com/b2c_1_signupsignin1/v2.0/.well-known/openid-configuration

Pokud chcete zjistit, které zásady se použily k podepsání tokenu (a kam si vyžádat metadata), máte dvě možnosti. Nejprve se název zásady zahrne do tfp (výchozí) nebo acr deklarace identity (podle konfigurace) v tokenu. Deklarace identity můžete parsovat z těla JWT dekódováním textu base-64 a deserializací výsledného řetězce JSON. Deklarace tfp identity je acr název zásady, která se použila k vydání tokenu. Druhou možností je zakódovat zásadu do hodnoty parametru state při vystavení požadavku a pak ji dekódovat, abyste zjistili, která zásada se použila. Obě metody jsou platné.

Azure AD B2C používá algoritmus RS256, který je založen na specifikaci RFC 3447. Veřejný klíč se skládá ze dvou složek: modulus RSA (n) a veřejného exponentu RSA (e). Hodnoty a e můžete programově převést n do formátu certifikátu pro ověření tokenu.

Popis, jak provést ověření podpisu, je mimo rozsah tohoto dokumentu. K dispozici je mnoho opensourcových knihoven, které vám pomůžou ověřit token.

Ověření deklarací identity

Když vaše aplikace nebo rozhraní API obdrží token ID, mělo by také provést několik kontrol deklarací identity v tokenu ID. Měly by se zkontrolovat následující deklarace identity:

  • cílová skupina – ověří, že token ID měl být poskytnut vaší aplikaci.
  • ne předvypršením platnosti a časem vypršení platnosti – ověří, že nevypršela platnost tokenu ID.
  • issuer – ověří, že token byl vaší aplikaci vydán Azure AD B2C.
  • nonce – strategie pro zmírnění útoku replay tokenu.

Úplný seznam ověření, která by vaše aplikace měla provádět, najdete ve specifikaci OpenID Connect.

Další kroky

Přečtěte si další informace o tom, jak používat přístupové tokeny.