Volání rozhraní REST API pomocí vlastních zásad Azure Active Directory B2C
Vlastní zásady Azure Active Directory B2C (Azure AD B2C) umožňují pracovat s logikou aplikace, kterou implementujete mimo Azure AD B2C. Provedete to tak, že provedete volání HTTP do koncového bodu. Vlastní zásady Azure AD B2C poskytují pro tento účel technický profil RESTful. Pomocí této funkce můžete implementovat funkce, které nejsou dostupné ve vlastních zásadách Azure AD B2C.
V tomto článku získáte informace o těchto tématech:
Vytvořte a nasaďte ukázkovou aplikaci Node.js pro použití jako službu RESTful.
Proveďte volání HTTP do služby Node.js RESTful pomocí technického profilu RESTful.
Zpracování nebo nahlášení chyby, kterou služba RESTful vrací do vlastních zásad.
Přehled scénáře
V části Vytvoření větvení na cestě uživatele pomocí vlastních zásad Azure AD B2C musí uživatelé, kteří vyberou osobní účet , poskytnout platný přístupový kód pozvánky, aby mohli pokračovat. Používáme statický přístupový kód, ale reálné aplikace tímto způsobem nefungují. Pokud služba, která vydává přístupové kódy, je pro vaši vlastní zásadu externí, musíte provést volání této služby a předat vstup přístupového kódu pro ověření uživatelem. Pokud je přístupový kód platný, služba vrátí odpověď HTTP 200 OK
a Azure AD B2C vydá token JWT. Jinak služba vrátí odpověď HTTP 409 Conflict
a uživatel musí znovu zadat přístupový kód.
Požadavky
Pokud ho ještě nemáte, vytvořte tenanta Azure AD B2C, který je propojený s vaším předplatným Azure.
Zaregistrujte webovou aplikaci a povolte implicitní udělení tokenu ID. Pro identifikátor URI přesměrování použijte https://jwt.ms.
V počítači musíte mít nainstalovaný Node.js .
V počítači musíte mít nainstalovaný Visual Studio Code (VS Code ).
Proveďte kroky v části Ověření uživatelských vstupů pomocí vlastních zásad Azure AD B2C. Tento článek je součástí vytváření a spouštění vlastních zásad, které vás provedou řadou návodů.
Poznámka:
Tento článek je součástí řady s návody k vytvoření a spuštění vlastních zásad v Azure Active Directory B2C. Doporučujeme spustit tuto řadu z prvního článku.
Krok 1 : Vytvoření a nasazení aplikace Node.js
Potřebujete nasadit aplikaci, která slouží jako vaše externí aplikace. Vaše vlastní zásada pak provede volání HTTP této aplikace.
Krok 1.1 – Vytvoření aplikace Node.js
Vytvořte složku pro hostování aplikace uzlu, například
access-code-app
.V terminálu změňte adresář do složky aplikace Node, například
cd access-code-app
a spusťtenpm init -y
. Tento příkaz vytvoří výchozípackage.json
soubor pro váš projekt Node.js.V terminálu spusťte
npm install express body-parser
. Tento příkaz nainstaluje architekturu Express a balíček body-parser .V projektu vytvořte
index.js
soubor.Ve VS Code otevřete
index.js
soubor a přidejte následující kód:const express = require('express'); let bodyParser = require('body-parser') //Create an express instance const app = express(); app.use( bodyParser.json() ); // to support JSON-encoded bodies app.use(bodyParser.urlencoded({ // to support URL-encoded bodies extended: true })); app.post('/validate-accesscode', (req, res) => { let accessCode = '88888'; if(accessCode == req.body.accessCode){ res.status(200).send(); }else{ let errorResponse = { "version" :"1.0", "status" : 409, "code" : "errorCode", "requestId": "requestId", "userMessage" : "The access code you entered is incorrect. Please try again.", "developerMessage" : `The provided code ${req.body.accessCode} does not match the expected code for user.`, "moreInfo" :"https://docs.microsoft.com/en-us/azure/active-directory-b2c/string-transformations" }; res.status(409).send(errorResponse); } }); app.listen(80, () => { console.log(`Access code service listening on port !` + 80); });
Můžete si všimnout, že když uživatel odešle nesprávný přístupový kód, můžete vrátit chybu přímo z rozhraní REST API. Vlastní zásady umožňují vrátit chybovou zprávu HTTP 4xx, například 400 (chybný požadavek) nebo stavový kód odpovědi 409 (konfliktní) s textem JSON odpovědi formátovaným v
errorResponse
proměnné. Zdroj přístupového kódu v aplikaci by mohl být načten z databáze. Přečtěte si další informace o vrácení chybové zprávy ověření.Pokud chcete otestovat, že aplikace funguje podle očekávání, postupujte následovně:
- V terminálu spusťte
node index.js
příkaz pro spuštění aplikačního serveru. - Pokud chcete vytvořit požadavek POST podobný požadavku uvedenému v tomto příkladu, můžete použít klienta HTTP, jako je Microsoft PowerShell nebo Postman:
POST http://localhost/validate-accesscode HTTP/1.1 Host: localhost Content-Type: application/x-www-form-urlencoded accessCode=user-code-code
Nahraďte
user-code-code
vstupem přístupového kódu uživatelem, například54321
. Pokud používáte PowerShell, spusťte následující skript.$accessCode="54321" $endpoint="http://localhost/validate-accesscode" $body=$accessCode $response=Invoke-RestMethod -Method Post -Uri $endpoint -Body $body echo $response
Pokud použijete nesprávný přístupový kód, odpověď vypadá podobně jako následující fragment kódu JSON:
{ "version": "1.0", "status": 409, "code": "errorCode", "requestId": "requestId", "userMessage": "The access code you entered is incorrect. Please try again.", "developerMessage": "The provided code 54321 does not match the expected code for user.", "moreInfo": "https://docs.microsoft.com/en-us/azure/active-directory-b2c/string-transformations" }
- V terminálu spusťte
V tuto chvíli jste připraveni nasadit aplikaci Node.js.
Krok 1.2 – Nasazení aplikace Node.js ve službě Aplikace Azure Service
Aby se vaše vlastní zásady dostaly k aplikaci Node.js, musí být dostupné, takže je potřeba ji nasadit. V tomto článku nasadíte aplikaci pomocí služby Aplikace Azure Service, ale použijete alternativní přístup k hostování.
Postupujte podle kroků v části Nasazení aplikace do Azure a nasaďte aplikaci Node.js do Azure. Jako název aplikace použijte popisný název, například custompolicyapi
. Proto:
Adresa URL aplikace vypadá podobně jako
https://custompolicyapi.azurewebsites.net
.Koncový bod služby vypadá podobně jako
https://custompolicyapi.azurewebsites.net/validate-accesscode
.
Aplikaci, kterou jste nasadili, můžete otestovat pomocí klienta HTTP, jako je Microsoft PowerShell nebo Postman. Tentokrát jako koncový bod použijte https://custompolicyapi.azurewebsites.net/validate-accesscode
adresu URL.
Krok 2 – volání rozhraní REST API
Teď, když je vaše aplikace spuštěná, musíte provést volání HTTP z vlastních zásad. Vlastní zásady Azure AD B2C poskytují technický profil RESTful, který používáte k volání externí služby.
Krok 2.1 – Definování technického profilu RESTful
V souboru vyhledejte ContosoCustomPolicy.XML
ClaimsProviders
oddíl a definujte nový technický profil RESTful pomocí následujícího kódu:
<!--<ClaimsProviders>-->
<ClaimsProvider>
<DisplayName>HTTP Request Technical Profiles</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="ValidateAccessCodeViaHttp">
<DisplayName>Check that the user has entered a valid access code by using Claims Transformations</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">https://custompolicyapi.azurewebsites.net/validate-accesscode</Item>
<Item Key="SendClaimsIn">Body</Item>
<Item Key="AuthenticationType">None</Item>
<Item Key="AllowInsecureAuthInProduction">true</Item>
</Metadata>
<InputClaims>
<InputClaim ClaimTypeReferenceId="accessCode" PartnerClaimType="accessCode" />
</InputClaims>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
<!--</ClaimsProviders>-->
Z protokolu můžete pozorovat, že technický profil nakonfigurujeme tak, aby používal RestfulProvider. Můžete také sledovat následující informace v části metadat:
Představuje
ServiceUrl
koncový bod rozhraní API. Její hodnota jehttps://custompolicyapi.azurewebsites.net/validate-accesscode
. Pokud jste aplikaci Node.js nasadili pomocí alternativní metody, nezapomeňte aktualizovat hodnotu koncového bodu.SendClaimsIn
určuje, jak se vstupní deklarace identity odesílají zprostředkovateli deklarací RESTful. Možné hodnoty:Body (default)
,Form
,Header
Url
neboQueryString
. Při použitíBody
, například v tomto článku, vyvoláte příkaz POST HTTP a data, která odešlete do rozhraní API, pokud jsou formátována jako klíč, páry hodnot v textu požadavku. Zjistěte , jak vyvolat příkaz GET HTTP a předat data jako řetězec dotazu.AuthenticationType
určuje typ ověřování, které provádí zprostředkovatel deklarací RESTful. Náš poskytovatel deklarací identity RESTful volá nechráněný koncový bod, takže jsme nastavili hodnotuAuthenticationType
Žádné. Pokud nastavíte typ ověřování naBearer
, musíte přidat element CryptographicKeys , který určuje úložiště pro váš přístupový token. Přečtěte si další informace o typech ověřování, které podporuje zprostředkovatel deklarací identity RESTful.Atribut PartnerClaimType v
InputClaim
sadě Určuje, jak přijímáte data v rozhraní API.
Krok 2.2 – aktualizace technického profilu ověření
Při vytváření větví na cestě uživatele pomocí vlastních zásad Azure AD B2C jste ověřili přístupový kód pomocí transformace deklarací identity. V tomto článku ověříte přístupový kód provedením volání HTTP do externí služby. Proto budete muset aktualizovat vlastní zásady tak, aby odrážely nový přístup.
Vyhledejte technický profil AccessCodeInputCollector a aktualizujte ReferenceId elementu ValidationTechnicalProfile na ValidateAccessCodeViaHttp:
Z:
<ValidationTechnicalProfile ReferenceId="CheckAccessCodeViaClaimsTransformationChecker"/>
na:
<ValidationTechnicalProfile ReferenceId="ValidateAccessCodeViaHttp"/>
V tuto chvíli není potřeba technický profil CheckAccessCodeViaClaimsTransformationChecker Id
a dá se odebrat.
Krok 3 : Nahrání souboru vlastních zásad
Ujistěte se, že je vaše aplikace Node.js spuštěná, a pak postupujte podle kroků v nahrání souboru vlastních zásad a nahrajte soubor zásad. Pokud nahráváte soubor se stejným názvem jako soubor, který už je na portálu, nezapomeňte vybrat Možnost Přepsat vlastní zásadu, pokud už existuje.
Krok 4 – Testování vlastních zásad
Postupujte podle kroků v části Otestování vlastních zásad a otestujte vlastní zásady :
- Jako typ účtu vyberte Osobní účet.
- Podle potřeby zadejte zbývající podrobnosti a pak vyberte Pokračovat. Zobrazí se nová obrazovka.
- Jako přístupový kód zadejte 88888 a pak vyberte Pokračovat. Po dokončení provádění zásady budete přesměrováni na
https://jwt.ms
a zobrazí se dekódovaný token JWT. Pokud tento postup zopakujete a zadáte jiný přístupový kód, kromě 88888, zobrazí se chyba Přístupový kód, který jste zadali, není správný. Opakujte akci.
Krok 5 – povolení režimu ladění
Při vývoji můžete chtít zobrazit podrobné chyby odeslané rozhraním API, jako je developerMessage a moreInfo. V takovém případě musíte ve svém technickém poskytovateli RESTful povolit režim ladění.
Vyhledejte svého technického poskytovatele ValidateAccessCodeViaHttp a do technického
metadata
poskytovatele přidejte následující položku:<Item Key="DebugMode">true</Item>
Uložte změny a nahrajte soubor zásad.
Otestujte vlastní zásady. Ujistěte se, že pro přístupový kód používáte nesprávný vstup. Zobrazí se chyba podobná té, která se zobrazuje na tomto snímku obrazovky:
Zpracování složitých datových částí JSON požadavků
Pokud rozhraní REST API, které voláte, vyžaduje, abyste odeslali složitou datovou část JSON, můžete datovou část vytvořit pomocí transformací deklarací identity GenerateJson JSON. Jakmile datovou část vygenerujete, můžete použít ClaimUsedForRequestPayload
možnost metadat k názvu deklarace identity obsahující datovou část JSON.
K vygenerování datové části JSON použijte například následující transformaci deklarací identity:
<ClaimsTransformation Id="GenerateRequestBodyClaimsTransformation" TransformationMethod="GenerateJson">
<InputClaims>
<InputClaim ClaimTypeReferenceId="email" TransformationClaimType="customerEntity.email" />
<InputClaim ClaimTypeReferenceId="objectId" TransformationClaimType="customerEntity.userObjectId" />
<InputClaim ClaimTypeReferenceId="givenName" TransformationClaimType="customerEntity.firstName" />
<InputClaim ClaimTypeReferenceId="surname" TransformationClaimType="customerEntity.lastName" />
<InputClaim ClaimTypeReferenceId="accessCode" TransformationClaimType="customerEntity.accessCode" />
</InputClaims>
<InputParameters>
<InputParameter Id="customerEntity.role.name" DataType="string" Value="Administrator" />
<InputParameter Id="customerEntity.role.id" DataType="long" Value="1" />
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="requestBodyPayload" TransformationClaimType="outputClaim" />
</OutputClaims>
</ClaimsTransformation>
Deklarace IdentityTransformation vygeneruje následující objekt JSON:
{
"customerEntity":{
"email":"john.s@contoso.com",
"userObjectId":"01234567-89ab-cdef-0123-456789abcdef",
"firstName":"John",
"lastName":"Smith",
"accessCode":"88888",
"role":{
"name":"Administrator",
"id": 1
}
}
}
Potom aktualizujte metadata, InputClaimsTransformations a InputClaims vašeho technického poskytovatele RESTful, jak je znázorněno níže:
<Metadata>
<Item Key="ClaimUsedForRequestPayload">requestBodyPayload</Item>
<!--Other Metadata items -->
</Metadata>
<!--Execute your InputClaimsTransformations to generate your request Payload-->
<InputClaimsTransformations>
<InputClaimsTransformation ReferenceId="GenerateRequestBodyClaimsTransformation" />
</InputClaimsTransformations>
<InputClaims>
<InputClaim ClaimTypeReferenceId="requestBodyPayload" />
</InputClaims>
Příjem dat z rozhraní REST API
Pokud vaše rozhraní REST API vrací data, která chcete zahrnout jako deklarace identity do zásad, můžete je získat zadáním deklarací identity v OutputClaims
prvku technického profilu RESTful. Pokud se název deklarace identity definované ve vaší zásadě liší od názvu definovaného v rozhraní REST API, musíte tyto názvy namapovat pomocí atributu PartnerClaimType
.
Pomocí kroků v části Příjem dat se dozvíte, jak formátovat data, která vlastní zásada očekává, jak zpracovat hodnoty null a jak parsovat vnořený text JSON rozhraní REST v rozhraní API.
Další kroky
Dále se dozvíte:
O transformacích deklarací identity JSON
Informace o technickém profilu RESTful
Vytvoření a čtení uživatelského účtu pomocí vlastních zásad Azure Active Directory B2C