Hitelesítés konfigurálása egy egyoldalas mintaalkalmazásban az Azure AD B2C használatával
Ez a cikk egy javaScript-minta egyoldalas alkalmazást (SPA) használ az Azure Active Directory B2C (Azure AD B2C) hitelesítés hozzáadásához az SLA-khoz.
Áttekintés
Az OpenID Csatlakozás (OIDC) egy olyan hitelesítési protokoll, amely az OAuth 2.0-ra épül. Ezzel biztonságosan bejelentkeztethet egy felhasználót egy alkalmazásba. Ez a SPA-minta az MSAL.js-t és az OIDC PKCE-folyamatot használja. Az MSAL.js egy Microsoft által biztosított kódtár, amely leegyszerűsíti a hitelesítés és az engedélyezési támogatás hozzáadását az SLA-khoz.
Bejelentkezési folyamat
A bejelentkezési folyamat a következő lépéseket foglalja magában:
- A felhasználók megnyitják a webalkalmazást, és kiválasztják a Bejelentkezés lehetőséget.
- Az alkalmazás hitelesítési kérelmet kezdeményez, és átirányítja a felhasználókat az Azure AD B2C-be.
- A felhasználók regisztrálnak vagy bejelentkeznek , és visszaállítják a jelszót. Másik lehetőségként egy közösségi fiókkal is bejelentkezhetnek.
- Miután a felhasználók bejelentkeznek, az Azure AD B2C egy engedélyezési kódot ad vissza az alkalmazásnak.
- Az egyoldalas alkalmazás ellenőrzi az azonosító jogkivonatát, beolvassa a jogcímeket, és lehetővé teszi a felhasználók számára a védett erőforrások és API-k meghívását.
Alkalmazásregisztráció áttekintése
Ahhoz, hogy az alkalmazás bejelentkezhessen az Azure AD B2C-vel, és meghívjon egy webes API-t, regisztráljon két alkalmazást az Azure AD B2C címtárban.
A webalkalmazás-regisztrációval az alkalmazás bejelentkezhet az Azure AD B2C-vel. A regisztráció során meg kell adnia az átirányítási URI-t. Az átirányítási URI az a végpont, amelyre az Azure AD B2C átirányítja a felhasználókat az Azure AD B2C-vel való hitelesítés befejezése után. Az alkalmazásregisztrációs folyamat létrehoz egy alkalmazásazonosítót, más néven ügyfél-azonosítót, amely egyedileg azonosítja az alkalmazást.
A webes API-regisztráció lehetővé teszi, hogy az alkalmazás biztonságos webes API-t hívjon meg. A regisztráció tartalmazza a webes API-hatóköröket. A hatókörök lehetővé teszik a védett erőforrások, például a webes API engedélyeinek kezelését. A webalkalmazásnak engedélyt kell adnia a webes API-hatókörökhöz. Hozzáférési jogkivonat kérése esetén az alkalmazás megadja a kívánt engedélyeket a kérelem hatókörparaméterében.
Az alkalmazásarchitektúra és a regisztrációk az alábbi ábrán láthatóak:
Webes API meghívása
A hitelesítés befejezése után a felhasználók kapcsolatba lépnek az alkalmazással, amely egy védett webes API-t hív meg. A webes API tulajdonosi jogkivonat-hitelesítést használ. A tulajdonosi jogkivonat az az alkalmazás által az Azure AD B2C-ből beszerzett hozzáférési jogkivonat. Az alkalmazás átadja a jogkivonatot a HTTPS-kérés engedélyezési fejlécében.
Authorization: Bearer <access token>
Ha a hozzáférési jogkivonat hatóköre nem egyezik a webes API hatóköreivel, a hitelesítési kódtár egy új hozzáférési jogkivonatot szerez be a megfelelő hatókörökkel.
Kijelentkezés folyamata
A kijelentkezés folyamata a következő lépésekből áll:
- Az alkalmazásból a felhasználók kijelentkeznek.
- Az alkalmazás törli a munkamenet-objektumokat, a hitelesítési tár pedig törli a jogkivonat-gyorsítótárát.
- Az alkalmazás az Azure AD B2C bejelentkezési végpontra viszi a felhasználókat az Azure AD B2C-munkamenet leállításához.
- A rendszer visszairányítja a felhasználókat az alkalmazásba.
Előfeltételek
Futó számítógép:
- Visual Studio Code vagy más kódszerkesztő.
- Node.js futtatókörnyezet
1. lépés: A felhasználói folyamat konfigurálása
Amikor a felhasználók megpróbálnak bejelentkezni az alkalmazásba, az alkalmazás elindít egy hitelesítési kérést az engedélyezési végponthoz egy felhasználói folyamaton keresztül. A felhasználói folyamat határozza meg és szabályozza a felhasználói élményt. Miután a felhasználók befejezték a felhasználói folyamatot, az Azure AD B2C létrehoz egy jogkivonatot, majd visszairányítja a felhasználókat az alkalmazásba.
Ha még nem tette meg, hozzon létre egy felhasználói folyamatot vagy egy egyéni szabályzatot. Ismételje meg a lépéseket három különálló felhasználói folyamat létrehozásához az alábbiak szerint:
- Kombinált bejelentkezés és felhasználói folyamat regisztrálása , például
susi
. Ez a felhasználói folyamat az Elfelejtett jelszó funkciót is támogatja. - Profilszerkesztési felhasználói folyamat, például
edit_profile
. - Új jelszó kérése felhasználói folyamat, például
reset_password
.
Az Azure AD B2C előre fel van függve B2C_1_
a felhasználói folyamat nevére. Például a susi
következő lesz B2C_1_susi
: .
2. lépés: Az SPA és az API regisztrálása
Ebben a lépésben létrehozza az SPA- és a webes API-alkalmazásregisztrációkat, és megadja a webes API hatóköreit.
2.1. lépés: A webes API-alkalmazás regisztrálása
A webes API-alkalmazásregisztráció létrehozásához (alkalmazásazonosító: 2) kövesse az alábbi lépéseket:
Jelentkezzen be az Azure Portalra.
Győződjön meg arról, hogy az Azure AD B2C-bérlőt tartalmazó könyvtárat használja. Válassza a Címtárak + előfizetések ikont a portál eszköztárán.
A Portál beállításai | Címtárak + előfizetések lap, keresse meg az Azure AD B2C-címtárat a címtárnévlistában, majd válassza a Váltás lehetőséget.
Az Azure Portalon keresse meg és válassza ki az Azure AD B2C-t.
Válassza a Alkalmazásregisztrációk, majd az Új regisztráció lehetőséget.
A Név mezőbe írja be az alkalmazás nevét (például my-api1). Hagyja meg az átirányítási URI és a támogatott fióktípusok alapértelmezett értékeit.
Válassza a Regisztrálás lehetőséget.
Az alkalmazásregisztráció befejezése után válassza az Áttekintés lehetőséget.
Jegyezze fel az alkalmazás (ügyfél) azonosítóját a webalkalmazás konfigurálásakor későbbi használatra.
2.2. lépés: Hatókörök konfigurálása
Válassza ki a létrehozott my-api1 alkalmazást (alkalmazásazonosító: 2) az Áttekintés lap megnyitásához.
A Kezelés területen válassza az API-k felfedése lehetőséget.
Az alkalmazásazonosító URI-ja mellett válassza a Hivatkozás beállítása lehetőséget. Cserélje le az alapértelmezett értéket (GUID) egy egyedi névre (például tasks-api), majd válassza a Mentés lehetőséget.
Amikor a webalkalmazás hozzáférési jogkivonatot kér a webes API-hoz, ezt az URI-t kell hozzáadnia az API-hoz definiált hatókörök előtagjaként.
Az API által definiált hatókörök alatt válassza a Hatókör hozzáadása lehetőséget.
Az API olvasási hozzáférését meghatározó hatókör létrehozása:
- A hatókör neveként adja meg a tasks.read nevet.
- Ha Rendszergazda hozzájárulás megjelenítendő nevét, írja be a Feladatok API olvasási hozzáférését.
- A Rendszergazda hozzájárulás leírásához írja be A feladatok API olvasási hozzáférésének engedélyezése című cikket.
Válassza a Hatókör hozzáadása lehetőséget.
Válassza a Hatókör hozzáadása lehetőséget, majd adjon hozzá egy, az API írási hozzáférését meghatározó hatókört:
- A Hatókör neve mezőbe írja be a tasks.write nevet.
- Ha Rendszergazda hozzájárulás megjelenítendő nevét szeretné megadni, írja be a Feladatok API írási hozzáférését.
- A Rendszergazda hozzájárulás leírásához írja be a Tevékenység API írási hozzáférését.
Válassza a Hatókör hozzáadása lehetőséget.
2.3. lépés: Az SPA regisztrálása
Az SPA-regisztráció létrehozásához kövesse az alábbi lépéseket:
- Jelentkezzen be az Azure Portalra.
- Ha több bérlőhöz is hozzáfér, a felső menüben válassza a Gépház ikont az Azure AD B2C-bérlőre való váltáshoz a Címtárak + előfizetések menüből.
- Keresse meg és válassza ki az Azure AD B2C-t.
- Válassza a Alkalmazásregisztrációk, majd az Új regisztráció lehetőséget.
- Adja meg az alkalmazás nevét (például MyApp).
- A Támogatott fióktípusok területen válassza a Fiókok lehetőséget bármely identitásszolgáltatóban vagy szervezeti címtárban (a felhasználók felhasználói folyamatokkal való hitelesítéséhez).
- Az Átirányítási URI területen válassza az Egyoldalas alkalmazás (SPA) lehetőséget, majd írja be
http://localhost:6420
az URL-címet az URL-mezőbe. - Az Engedélyek csoportban jelölje be a Rendszergazdai hozzájárulás megadása az openid és offline hozzáférési engedélyekhez jelölőnégyzetet.
- Válassza a Regisztrálás lehetőséget.
Jegyezze fel az alkalmazás (ügyfél) azonosítóját , amelyet később használjon a webalkalmazás konfigurálásakor.
2.4. lépés: Az implicit engedélyezési folyamat engedélyezése
Ha az SPA-alkalmazás az MSAL.js 1.3-as vagy korábbi verzióit és az implicit engedélyezési folyamatot használja, vagy felhasználói folyamat vagy egyéni szabályzat teszteléséhez konfigurálja https://jwt.ms/ az alkalmazást, engedélyeznie kell az implicit engedélyezési folyamatot az alkalmazásregisztrációban:
A bal oldali menü Kezelés területén válassza a Hitelesítés lehetőséget.
Az Implicit engedélyezési és hibrid folyamatok területen jelölje be az Access-jogkivonatokat (implicit folyamatokhoz) és az azonosító jogkivonatokat (implicit és hibrid folyamatokhoz).
Válassza a Mentés parancsot.
Ha az alkalmazás MSAL.js 2.0 vagy újabb verziót használ, ne engedélyezze az implicit folyamat-engedélyezést, mivel az MSAL.js 2.0+ támogatja az engedélyezési kódfolyamatot a PKCE-vel. A cikkben szereplő SPA-alkalmazás PKCE-folyamatot használ, ezért nem kell engedélyeznie az implicit engedélyezési folyamatot.
2.5. lépés: Engedélyek megadása
Az alkalmazás (alkalmazásazonosító: 1) engedélyének megadásához kövesse az alábbi lépéseket:
Válassza Alkalmazásregisztrációk, majd válassza ki a létrehozott alkalmazást (alkalmazásazonosító: 1).
A Kezelés területen válassza ki az API-engedélyeket.
A Konfigurált engedélyek csoportban válassza az Engedély hozzáadása lehetőséget.
Válassza a Saját API-k lapot.
Válassza ki azt az API-t (alkalmazásazonosító: 2), amelyhez a webalkalmazásnak hozzáférést kell biztosítani. Írja be például a my-api1 nevet.
Az Engedély területen bontsa ki a tevékenységeket, majd válassza ki a korábban definiált hatóköröket (például tasks.read és tasks.write).
Jelölje be az Engedélyek hozzáadása lehetőséget.
Válassza a bérlő nevének> rendszergazdai <hozzájárulásának megadása lehetőséget.
Válassza az Igen lehetőséget.
Válassza a Frissítés lehetőséget, majd ellenőrizze, hogy a megadott for ... jelenik-e meg mindkét hatókör állapotában .
A Konfigurált engedélyek listájában válassza ki a hatókört, majd másolja a teljes nevet a hatókörbe.
3. lépés: Az SPA-mintakód lekérése
Ez a minta bemutatja, hogy egy egyoldalas alkalmazás hogyan használhatja az Azure AD B2C-t a felhasználói regisztrációhoz és a bejelentkezéshez. Ezután az alkalmazás beszerez egy hozzáférési jogkivonatot, és meghív egy védett webes API-t.
A SPA-mintakód lekéréséhez tegye az alábbiak egyikét:
Zip-fájl letöltése.
Klónozza a mintát a GitHubról a következő parancs futtatásával:
git clone https://github.com/Azure-Samples/ms-identity-b2c-javascript-spa.git
3.1. lépés: A SPA-minta frissítése
Most, hogy beszerezte az SPA-mintát, frissítse a kódot az Azure AD B2C-vel és a webes API-értékekkel. A mintamappában, a App
mappa alatt nyissa meg az alábbi táblázatban felsorolt JavaScript-fájlokat, majd frissítse őket a hozzájuk tartozó értékekkel.
Fájl | Key | Érték |
---|---|---|
authConfig.js | clientId | A SPA azonosítója a 2.3. lépésből. |
policies.js | Nevek | Az 1. lépésben létrehozott felhasználói folyamatok vagy egyéni szabályzat. |
policies.js | Hatóságok | Az Azure AD B2C felhasználói folyamatai vagy egyéni szabályzatok hatóságai, például https://<your-tenant-name>.b2clogin.com/<your-tenant-name>.onmicrosoft.com/<your-sign-in-sign-up-policy> . Csere your-sign-in-sign-up-policy az 1. lépésben létrehozott felhasználói folyamatra vagy egyéni szabályzatra |
policies.js | authorityDomain | Az Azure AD B2C-szolgáltató tartománya, például <your-tenant-name>.b2clogin.com . |
apiConfig.js | b2cScopes | A 2.2. lépésben létrehozott webes API-hatókörök (példáulb2cScopes: ["https://<your-tenant-name>.onmicrosoft.com/tasks-api/tasks.read"] ). |
apiConfig.js | webApi | A webes API URL-címe. http://localhost:5000/hello |
Az eredményként kapott kódnak a következő mintához hasonlóan kell kinéznie:
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"
};
4. lépés: A webes API mintakódjának lekérése
Most, hogy a webes API regisztrálva lett, és ön definiálta a hatóköreit, konfigurálja a webes API-kódot az Azure AD B2C-bérlővel való együttműködéshez.
A webes API mintakódjának lekéréséhez tegye az alábbiak egyikét:
Klónozza a webes API-mintaprojektet a GitHubról az alábbi parancs futtatásával:
git clone https://github.com/Azure-Samples/active-directory-b2c-javascript-nodejs-webapi.git
Közvetlenül is megnyithatja az Azure-Samples/active-directory-b2c-javascript-nodejs-webapi projektet a GitHubon.
4.1. lépés: A webes API frissítése
Nyissa meg a config.json fájlt a kódszerkesztőben.
Módosítsa a változóértékeket a korábban létrehozott alkalmazásregisztrációval. És frissítse a
policyName
felhasználói folyamatot, amelyet az előfeltételek részeként hozott létre (például b2c_1_susi)."credentials": { "tenantName": "<your-tenant-name>", "clientID": "<your-webapi-application-ID>" }, "policies": { "policyName": "b2c_1_susi" }, "resource": { "scope": ["tasks.read"] },
4.2. lépés: A CORS engedélyezése
Ahhoz, hogy az egyoldalas alkalmazás meghívhassa a Node.js webes API-t, engedélyeznie kell a forrásközi erőforrás-megosztást (CORS) a webes API-ban. Éles alkalmazásban ügyeljen arra, hogy melyik tartomány küldi el a kérést. Ebben a példában bármely tartományból engedélyezheti a kérelmeket.
A CORS engedélyezéséhez használja a következő köztes szoftvereket. A letöltött Node.js webes API-kódmintában már hozzá lett adva az index.js fájlhoz.
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();
});
5. lépés: Az SPA és a webes API futtatása
Most már tesztelheti az egyoldalas alkalmazás hatókörön belüli hozzáférését az API-hoz. Futtassa a Node.js webes API-t és a minta JavaScript egyoldalas alkalmazást a helyi gépen. Ezután jelentkezzen be az egyoldalas alkalmazásba, és válassza a Call API gombot a védett API-ra irányuló kérés indításához.
A Node.js webes API futtatása
Nyisson meg egy konzolablakot, és váltson a Node.js webes API-mintát tartalmazó könyvtárra. Például:
cd active-directory-b2c-javascript-nodejs-webapi
Run the following commands:
npm install && npm update node index.js
A konzolablakban megjelenik az alkalmazás helyének portszáma.
Listening on port 5000...
Az egyoldalas alkalmazás futtatása
Nyisson meg egy másik konzolablakot, és váltson a JavaScript SPA-mintát tartalmazó könyvtárra. Például:
cd ms-identity-b2c-javascript-spa
Run the following commands:
npm install && npm update npm start
A konzolablak megjeleníti az alkalmazás helyének portszámát.
Listening on port 6420...
Az alkalmazás megtekintéséhez nyissa meg
http://localhost:6420
a böngészőben.Fejezze be a regisztrációt vagy a bejelentkezési folyamatot. Miután sikeresen bejelentkezett, látnia kell a "Felhasználó <a bejelentkezett felhasználónév> " üzenetet.
Válassza a Hívás API gombot. Az SPA egy kérésben elküldi a hozzáférési jogkivonatot a védett webes API-nak, amely visszaadja a bejelentkezett felhasználó megjelenítendő nevét:
Az alkalmazás üzembe helyezése
Egy éles alkalmazásban az alkalmazásregisztrációs átirányítási URI általában egy nyilvánosan elérhető végpont, ahol az alkalmazás fut, például https://contoso.com/signin-oidc
.
A regisztrált alkalmazásokban bármikor hozzáadhat és módosíthat átirányítási URI-kat. Az átirányítási URI-kra a következő korlátozások vonatkoznak:
- A válasz URL-címnek a sémával
https
kell kezdődnie. - A válasz URL-címe megkülönbözteti a kis- és nagybetűkre vonatkozó adatokat. Az esetnek meg kell egyeznie a futó alkalmazás URL-elérési útjának esetével.
Következő lépések
A cikkben tárgyalt fogalmakkal kapcsolatos további információk: