Konfigurace ověřování v ukázkové jednostrákové aplikaci pomocí Azure AD B2C
Tento článek používá ukázkovou jednostránkovou aplikaci JavaScriptu (SPA) k ilustraci přidání ověřování Azure Active Directory B2C (Azure AD B2C) do vašich služeb SPA.
Přehled
OpenID Connect (OIDC) je ověřovací protokol založený na OAuth 2.0. Můžete ho použít k bezpečnému přihlášení uživatele k aplikaci. Tato ukázka SPA používá MSAL.js a tok PKCE OIDC. MSAL.js je knihovna poskytovaná Microsoftem, která zjednodušuje přidávání podpory ověřování a autorizace do služeb SPA.
Tok přihlášení
Tok přihlášení zahrnuje následující kroky:
- Uživatelé přejdou do webové aplikace a vyberou Přihlášení.
- Aplikace zahájí žádost o ověření a přesměruje uživatele do Azure AD B2C.
- Uživatelé se zaregistrují nebo přihlásí a resetují heslo. Případně se můžou přihlásit pomocí účtu sociální sítě.
- Po přihlášení uživatelů azure AD B2C vrátí autorizační kód do aplikace.
- Jednostránová aplikace ověří token ID, přečte deklarace identity a umožní uživatelům volat chráněné prostředky a rozhraní API.
Přehled registrace aplikací
Pokud chcete aplikaci povolit přihlášení pomocí Azure AD B2C a volat webové rozhraní API, zaregistrujete dvě aplikace v adresáři Azure AD B2C.
Registrace webové aplikace umožňuje vaší aplikaci přihlásit se pomocí Azure AD B2C. Během registrace zadáte identifikátor URI přesměrování. Identifikátor URI přesměrování je koncový bod, na který jsou uživatelé přesměrováni službou Azure AD B2C po dokončení ověřování pomocí Azure AD B2C. Proces registrace aplikace vygeneruje ID aplikace, označované také jako ID klienta, které jednoznačně identifikuje vaši aplikaci.
Registrace webového rozhraní API umožňuje vaší aplikaci volat zabezpečené webové rozhraní API. Registrace zahrnuje rozsahy webového rozhraní API. Obory poskytují způsob, jak spravovat oprávnění k chráněným prostředkům, jako je například webové rozhraní API. Oprávnění webové aplikace udělíte rozsahům webového rozhraní API. Při vyžádání přístupového tokenu aplikace určuje požadovaná oprávnění v parametru oboru požadavku.
Architektura a registrace aplikací jsou znázorněny v následujícím diagramu:
Volání webového rozhraní API
Po dokončení ověřování uživatelé komunikují s aplikací, která vyvolá chráněné webové rozhraní API. Webové rozhraní API používá ověřování nosné tokeny . Nosný token je přístupový token, který aplikace získala z Azure AD B2C. Aplikace předá token v autorizační hlavičce požadavku HTTPS.
Authorization: Bearer <access token>
Pokud obor přístupového tokenu neodpovídá oborům webového rozhraní API, knihovna ověřování získá nový přístupový token se správnými obory.
Tok odhlášení
Tok odhlášení zahrnuje následující kroky:
- Z aplikace se uživatelé odhlásí.
- Aplikace vymaže objekty relace a knihovna ověřování vymaže mezipaměť tokenů.
- Aplikace přesáhne uživatele do koncového bodu pro odhlášení z Azure AD B2C, aby ukončila relaci Azure AD B2C.
- Uživatelé se přesměrují zpět do aplikace.
Požadavky
Počítač, na kterém běží:
- Visual Studio Code nebo jiný editor kódu
- modul runtime Node.js
Krok 1: Konfigurace toku uživatele
Když se uživatelé pokusí přihlásit k aplikaci, aplikace spustí žádost o ověření do koncového bodu autorizace prostřednictvím toku uživatele. Tok uživatele definuje a řídí uživatelské prostředí. Jakmile uživatelé dokončí tok uživatele, Azure AD B2C vygeneruje token a pak přesměruje uživatele zpět do vaší aplikace.
Pokud jste to ještě neudělali, vytvořte tok uživatele nebo vlastní zásadu. Opakujte kroky pro vytvoření tří samostatných toků uživatelů následujícím způsobem:
- Kombinovaný tok přihlášení a registrace uživatele, například
susi
. Tento tok uživatele podporuje také zapomenuté heslo . - Profil upravuje tok uživatele, například
edit_profile
. - Tok uživatele resetování hesla, například
reset_password
.
Předzálohuje B2C_1_
Azure AD B2C na název toku uživatele. Například z susi
se stane B2C_1_susi
.
Krok 2: Registrace spa a rozhraní API
V tomto kroku vytvoříte spa a registraci aplikací webového rozhraní API a zadáte rozsahy webového rozhraní API.
Krok 2.1: Registrace aplikace webového rozhraní API
Pokud chcete vytvořit registraci aplikace webového rozhraní API (ID aplikace: 2), postupujte takto:
Přihlaste se k portálu Azure.
Ujistěte se, že používáte adresář, který obsahuje vašeho tenanta Azure AD B2C. Na panelu nástrojů portálu vyberte ikonu Adresáře a předplatná .
V nastavení portálu | Adresářů a stránka předplatných , vyhledejte adresář Azure AD B2C v seznamu názvů adresářů a pak vyberte Přepnout.
Na webu Azure Portal vyhledejte a vyberte Azure AD B2C.
Vyberte Registrace aplikací a pak vyberte Nová registrace.
Jako Název zadejte název aplikace (například my-api1). U identifikátoru URI přesměrování a podporovaných typů účtů ponechte výchozí hodnoty.
Vyberte Zaregistrovat.
Po dokončení registrace aplikace vyberte Přehled.
Poznamenejte si hodnotu ID aplikace (klienta) pro pozdější použití při konfiguraci webové aplikace.
Krok 2.2: Konfigurace oborů
Výběrem aplikace my-api1, kterou jste vytvořili (ID aplikace: 2), otevřete její stránku Přehled.
V části Spravovat vyberte Zveřejnit rozhraní API.
Vedle identifikátoru URI ID aplikace vyberte odkaz Nastavit. Nahraďte výchozí hodnotu (GUID) jedinečným názvem (například tasks-api) a pak vyberte Uložit.
Když vaše webová aplikace požádá o přístupový token pro webové rozhraní API, měl by tento identifikátor URI přidat jako předponu pro každý obor, který definujete pro rozhraní API.
V části Obory definované tímto rozhraním API vyberte Přidat obor.
Vytvoření oboru, který definuje přístup pro čtení k rozhraní API:
- Jako název oboru zadejte tasks.read.
- Jako zobrazovaný název souhlasu správce zadejte přístup pro čtení k rozhraní API pro úlohy.
- Jako popis souhlasu správce zadejte Možnost Umožňuje přístup pro čtení k rozhraní API pro úlohy.
Vyberte Přidat rozsah.
Vyberte Přidat obor a pak přidejte obor, který definuje přístup k zápisu do rozhraní API:
- Jako název oboru zadejte tasks.write.
- Jako zobrazovaný název souhlasu správce zadejte přístup k zápisu k rozhraní API pro úlohy.
- Jako popis souhlasu správce zadejte Možnost Umožňuje přístup k zápisu do rozhraní API pro úlohy.
Vyberte Přidat rozsah.
Krok 2.3: Registrace spa
Pokud chcete vytvořit registraci spa, postupujte následovně:
- Přihlaste se k portálu Azure.
- Pokud máte přístup k více tenantům, v horní nabídce vyberte ikonu Nastavení a v nabídce Adresáře a předplatná přepněte do tenanta Azure AD B2C.
- Vyhledejte a vyberte Azure AD B2C.
- Vyberte Registrace aplikací a pak vyberte Nová registrace.
- Zadejte název aplikace (například Moje aplikace).
- V sekci Podporované typy účtů vyberte Účty u libovolného zprostředkovatele identity nebo organizačního adresáře (pro ověřování uživatelů pomocí toků uživatelů).
- V části Identifikátor URI pro přesměrování vyberte jednostránkové aplikace (SPA) a do pole adresa URL zadejte
http://localhost:6420
. - V části Oprávnění zaškrtněte políčko Udělit souhlas správce s otevřenými a offline přístupy.
- Vyberte Zaregistrovat.
Poznamenejte si ID aplikace (klienta), které se použije později při konfiguraci webové aplikace.
Krok 2.4: Povolení toku implicitního udělení
Implicitní tok udělení můžete povolit ze dvou důvodů, když používáte MSAL.js verze 1.3 nebo starší nebo když použijete registraci aplikace k otestování toku uživatele pro účely testování.
Pomocí těchto kroků povolíte implicitní tok udělení pro vaši aplikaci:
Vyberte registraci aplikace, kterou jste vytvořili.
V části Spravovat vyberte Ověřování.
V části Implicitní udělení a hybridní toky zaškrtněte políčka Přístupové tokeny (používané pro implicitní toky) i tokeny ID (používané pro implicitní a hybridní toky).
Zvolte Uložit.
Poznámka:
Pokud vaše aplikace používá MSAL.js 2.0 nebo novější, nepovolujte implicitní tok udělení, protože MSAL.js 2.0+ podporuje tok autorizačního kódu OAuth 2.0 (s PKCE). Pokud povolíte implicitní udělení pro testování toku uživatele, nezapomeňte před nasazením aplikace do produkčního prostředí zakázat implicitní nastavení toku udělení oprávnění.
Krok 2.5: Udělení oprávnění
Pokud chcete aplikaci udělit oprávnění (ID aplikace: 1), postupujte takto:
Vyberte Registrace aplikací a pak vyberte aplikaci, kterou jste vytvořili (ID aplikace: 1).
V části Spravovat vyberte oprávnění rozhraní API.
V části Nakonfigurovaná oprávnění vyberte Přidat oprávnění.
Vyberte kartu Moje rozhraní API.
Vyberte rozhraní API (ID aplikace: 2), ke kterému má mít webová aplikace udělený přístup. Zadejte například my-api1.
V části Oprávnění rozbalte úkoly a vyberte obory, které jste definovali dříve (například tasks.read a tasks.write).
Vyberte Přidat oprávnění.
Vyberte Udělení souhlasu správce pro <název> vašeho tenanta.
Vyberte Ano.
Vyberte Aktualizovat a potom ověřte, že se pro oba obory zobrazuje hodnota Uděleno pro ... .
V seznamu Nakonfigurovaná oprávnění vyberte obor a zkopírujte celý název oboru.
Krok 3: Získání ukázkového kódu SPA
Tato ukázka ukazuje, jak může jednostránka používat Azure AD B2C k registraci a přihlášení uživatelů. Aplikace pak získá přístupový token a zavolá chráněné webové rozhraní API.
Pokud chcete získat vzorový kód SPA, můžete udělat jednu z těchto věcí:
Stáhněte si soubor ZIP.
Naklonujte ukázku z GitHubu spuštěním následujícího příkazu:
git clone https://github.com/Azure-Samples/ms-identity-b2c-javascript-spa.git
Krok 3.1: Aktualizace ukázky SPA
Teď, když jste získali ukázku SPA, aktualizujte kód hodnotami Azure AD B2C a webového rozhraní API. V ukázkové složce ve App
složce otevřete soubory JavaScriptu uvedené v následující tabulce a aktualizujte je odpovídajícími hodnotami.
Soubor | Key | Hodnota |
---|---|---|
authConfig.js | clientId | ID SPA z kroku 2.3. |
policies.js | názvy | Toky uživatelů nebo vlastní zásady, které jste vytvořili v kroku 1. |
policies.js | úřady | Toky uživatelů Azure AD B2C nebo vlastní zásady, například https://<your-tenant-name>.b2clogin.com/<your-tenant-name>.onmicrosoft.com/<your-sign-in-sign-up-policy> . Nahrazení your-sign-in-sign-up-policy tokem uživatele nebo vlastní zásadou, kterou jste vytvořili v kroku 1 |
policies.js | authorityDomain | Vaše doména autority Azure AD B2C, například <your-tenant-name>.b2clogin.com . |
apiConfig.js | b2cScopes | Obory webového rozhraní API, které jste vytvořili v kroku 2.2 (například b2cScopes: ["https://<your-tenant-name>.onmicrosoft.com/tasks-api/tasks.read"] ). |
apiConfig.js | webApi | Adresa URL webového rozhraní API, http://localhost:5000/hello . |
Výsledný kód by měl vypadat podobně jako v následující ukázce:
authConfig.js:
const msalConfig = {
auth: {
clientId: "<your-MyApp-application-ID>", // This is the ONLY mandatory field; everything else is optional.
authority: b2cPolicies.authorities.signUpSignIn.authority, // Choose sign-up/sign-in user-flow as your default.
knownAuthorities: [b2cPolicies.authorityDomain], // You must identify your tenant's domain as a known authority.
redirectUri: "http://localhost:6420", // You must register this URI on Azure Portal/App Registration. Defaults to "window.location.href".
},
cache: {
cacheLocation: "sessionStorage",
storeAuthStateInCookie: false,
},
system: {
loggerOptions: {
loggerCallback: (level, message, containsPii) => {
if (containsPii) {
return;
}
switch (level) {
case msal.LogLevel.Error:
console.error(message);
return;
case msal.LogLevel.Info:
console.info(message);
return;
case msal.LogLevel.Verbose:
console.debug(message);
return;
case msal.LogLevel.Warning:
console.warn(message);
return;
}
}
}
}
};
};
const loginRequest = {
scopes: ["openid", ...apiConfig.b2cScopes],
};
const tokenRequest = {
scopes: [...apiConfig.b2cScopes], // e.g. ["https://fabrikamb2c.onmicrosoft.com/helloapi/demo.read"]
forceRefresh: false // Set this to "true" to skip a cached token and go to the server to get a new token
};
policies.js:
const b2cPolicies = {
names: {
signUpSignIn: "b2c_1_susi",
forgotPassword: "b2c_1_reset",
editProfile: "b2c_1_edit_profile"
},
authorities: {
signUpSignIn: {
authority: "https://your-tenant-name.b2clogin.com/your-tenant-name.onmicrosoft.com/b2c_1_susi",
},
forgotPassword: {
authority: "https://your-tenant-name.b2clogin.com/your-tenant-name.onmicrosoft.com/b2c_1_reset",
},
editProfile: {
authority: "https://your-tenant-name.b2clogin.com/your-tenant-name.onmicrosoft.com/b2c_1_edit_profile"
}
},
authorityDomain: "your-tenant-name.b2clogin.com"
}
apiConfig.js:
const apiConfig = {
b2cScopes: ["https://your-tenant-name.onmicrosoft.com/tasks-api/tasks.read"],
webApi: "http://localhost:5000/hello"
};
Krok 4: Získání ukázkového kódu webového rozhraní API
Teď, když je webové rozhraní API zaregistrované a definovali jste jeho obory, nakonfigurujte kód webového rozhraní API tak, aby fungoval s vaším tenantem Azure AD B2C.
Pokud chcete získat ukázkový kód webového rozhraní API, udělejte jednu z těchto věcí:
Naklonujte ukázkový projekt webového rozhraní API z GitHubu spuštěním následujícího příkazu:
git clone https://github.com/Azure-Samples/active-directory-b2c-javascript-nodejs-webapi.git
Můžete také přejít přímo na projekt Azure-Samples/active-directory-b2c-javascript-nodejs-webapi na GitHubu.
Krok 4.1: Aktualizace webového rozhraní API
Otevřete soubor config.json v editoru kódu.
Upravte hodnoty proměnných pomocí registrace aplikace, kterou jste vytvořili dříve. A aktualizujte
policyName
tok uživatele, který jste vytvořili jako součást požadavků (například b2c_1_susi)."credentials": { "tenantName": "<your-tenant-name>", "clientID": "<your-webapi-application-ID>" }, "policies": { "policyName": "b2c_1_susi" }, "resource": { "scope": ["tasks.read"] },
Krok 4.2: Povolení CORS
Pokud chcete jednostrápové aplikaci povolit volání Node.js webového rozhraní API, musíte povolit sdílení prostředků mezi zdroji (CORS) ve webovém rozhraní API. V produkční aplikaci buďte opatrní ohledně toho, která doména požadavek provádí. V tomto příkladu povolte požadavky z jakékoli domény.
K povolení CORS použijte následující middleware. V ukázce kódu webového rozhraní API Node.js, který jste stáhli, už byl přidán do souboru index.js .
app.use((req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Authorization, Origin, X-Requested-With, Content-Type, Accept");
next();
});
Krok 5: Spuštění spa a webového rozhraní API
Teď jste připraveni otestovat přístup k rozhraní API s vymezeným oborem jednostráňové aplikace. Na místním počítači spusťte webové rozhraní API Node.js i ukázkovou jednostrákovou aplikaci JavaScriptu. Pak se přihlaste k jednostránka aplikaci a výběrem tlačítka Rozhraní API volání zahajte požadavek na chráněné rozhraní API.
Spuštění webového rozhraní API Node.js
Otevřete okno konzoly a přejděte do adresáře, který obsahuje ukázku webového rozhraní API Node.js. Příklad:
cd active-directory-b2c-javascript-nodejs-webapi
Spusťte následující příkazy:
npm install && npm update node index.js
V okně konzoly se zobrazí číslo portu, kde je aplikace hostovaná.
Listening on port 5000...
Spuštění jednostráňové aplikace
Otevřete další okno konzoly a přejděte do adresáře, který obsahuje ukázku javascriptového spa. Příklad:
cd ms-identity-b2c-javascript-spa
Spusťte následující příkazy:
npm install && npm update npm start
V okně konzoly se zobrazí číslo portu, kde je aplikace hostovaná.
Listening on port 6420...
Pokud chcete aplikaci zobrazit, přejděte v prohlížeči na
http://localhost:6420
stránku.Dokončete proces registrace nebo přihlášení. Po úspěšném přihlášení by se měla zobrazit zpráva "Uživatel <, vaše uživatelské jméno> přihlášené".
Vyberte tlačítko Rozhraní API pro volání. Spa odešle přístupový token v požadavku do chráněného webového rozhraní API, který vrátí zobrazovaný název přihlášeného uživatele:
Nasazení aplikace
V produkční aplikaci je identifikátor URI přesměrování registrace aplikace obvykle veřejně přístupným koncovým bodem, ve kterém je vaše aplikace spuštěná, například https://contoso.com/signin-oidc
.
Identifikátory URI pro přesměrování můžete v registrovaných aplikacích kdykoli přidávat a upravovat. Pro identifikátory URI přesměrování platí následující omezení:
- Adresa URL odpovědi musí začínat schématem
https
. - V adrese URL odpovědi se rozlišují malá a velká písmena. Jeho případ se musí shodovat s případem cesty URL spuštěné aplikace.
Další kroky
Další informace o konceptech probíraných v tomto článku: