Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Důležité
Od 1. května 2025 už nebude Azure AD B2C k dispozici k nákupu pro nové zákazníky. Další informace najdete v našich nejčastějších dotazech.
V tomto kurzu se naučíte integrovat ověřování Azure Active Directory B2C (Azure AD B2C) s využitím služby DRS (Transmit Security Detection and Response Services). Transmit Security umožňuje detekovat riziko v interakcích zákazníků s digitálními komunikačními kanály a umožnit informovaná rozhodnutí o totožnosti a důvěryhodnosti v rámci spotřebitelského prožitku.
Tato funkce je dostupná pouze pro vlastní zásady. Ve krocích nastavení vyberte vlastní politika v předchozím výběru.
Popis scénáře
Integrace detekce přenosu a odezvy zahrnuje následující komponenty:
- Tenant Azure AD B2C: Ověřuje uživatele a hostuje skript, který shromažďuje informace o zařízení, jakmile uživatelé spustí cílovou zásadu. Blokuje nebo zpochybňuje pokusy o přihlášení či registraci na základě doporučení rizik vráceného službou Transmit.
- Vlastní šablony uživatelského rozhraní: Přizpůsobí obsah HTML stránek vykreslených službou Azure AD B2C. Mezi tyto stránky patří fragmenty kódu JavaScriptu vyžadované pro detekci rizik přenosu.
- Služba přenosu dat pro shromažďování: Dynamicky vložený skript, který protokoluje informace o zařízení, jež se používají k neustálému vyhodnocování rizika při interakcích uživatelů.
- Koncový bod rozhraní DRS API: Poskytuje doporučení k riziku na základě shromážděných dat. Azure AD B2C komunikuje s tímto koncovým bodem pomocí konektoru REST API.
- Azure Functions: Váš hostovaný koncový bod rozhraní API, který se používá k získání doporučení z koncového bodu Transmit DRS prostřednictvím konektoru rozhraní API.
Následující diagram architektury znázorňuje implementaci popsanou v průvodci:
- Uživatel se přihlásí pomocí Azure AD B2C.
- Vlastní stránka inicializuje sadu Transmit SDK, která spustí streamování informací o zařízeních do Transmit.
- Azure AD B2C hlásí událost přihlášení systému Transmit, aby získala akční token.
- Přenos vrátí token akce a Azure AD B2C pokračuje s přihlášením nebo přihlášením uživatele.
- Jakmile se uživatel přihlásí, Azure AD B2C požádá o doporučení k riziku od Transmitu pomocí Azure Function.
- Funkce Azure odešle požadavek na doporučení pomocí tokenu akce.
- Funkce Transmit vrátí doporučení (výzva, povolení, nebo zamítnutí) na základě shromážděných informací o zařízení.
- Funkce Azure Functions předá výsledek doporučení do Azure AD B2C, aby to zvládla odpovídajícím způsobem.
- Azure AD B2C v případě potřeby provede další kroky, jako je vícefaktorové ověřování a dokončí tok registrace nebo přihlášení.
Požadavky
- Předplatné Entra od Microsoftu. Pokud ho nemáte, získejte bezplatný účet.
- Tenant Azure AD B2C propojený s předplatným Entra
- Registrovaná webová aplikace v tenantovi Azure AD B2C
- Vlastní zásady Azure AD B2C
- Tenant zabezpečení přenosu. Přejít na transmitsecurity.com
Krok 1: Vytvoření aplikace Pro přenos
Přihlaste se k portálu pro správu přenosu a vytvořte aplikaci:
V aplikaci vyberte Přidat aplikaci.
Nakonfigurujte aplikaci s následujícími atributy:
Vlastnictví Popis Název aplikace Název aplikace Název klienta Název klienta Přesměrovací URI Zadejte adresu URL webu. Tento atribut je povinné pole, ale nepoužívá se pro tento tok. Vyberte Přidat.
Při registraci se zobrazí ID klienta a tajný klíč klienta . Poznamenejte si hodnoty pro pozdější použití.
Krok 2: Vytvoření vlastního uživatelského rozhraní
Začněte integrací funkce Přenést DRS do front-endové aplikace B2C. Vytvořte vlastní přihlašovací stránku, která integruje sadu Transmit SDK a nahradí výchozí přihlašovací stránku Azure AD B2C.
Po aktivaci začne Funkce Odeslat SLUŽBU DRS shromažďovat informace pro uživatele, který pracuje s vaší aplikací. Přenos DRS vrátí token akce, který Azure AD B2C potřebuje pro doporučení k riziku.
Pokud chcete integrovat Přenos DRS do přihlašovací stránky B2C, postupujte takto:
Připravte vlastní soubor HTML pro přihlašovací stránku na základě ukázkových šablon. Přidejte následující skript pro načtení a inicializaci sady Transmit SDK a získání tokenu akce. Vrácený token akce by měl být uložen ve skrytém elementu HTML (
ts-drs-response
v tomto příkladu).<!-- Function that obtains an action token --> <script> function fill_token() { window.tsPlatform.drs.triggerActionEvent("login").then((actionResponse) => { let actionToken = actionResponse.actionToken; document.getElementById("ts-drs-response").value = actionToken; console.log(actionToken); }); } </script> <!-- Loads DRS SDK --> <script src="https://platform-websdk.transmitsecurity.io/platform-websdk/latest/ts-platform-websdk.js" defer> </script> <!-- Upon page load, initializes DRS SDK and calls the fill_token function --> <script defer> window.onload = function() { if (window.tsPlatform) { // Client ID found in the app settings in Transmit Admin portal window.tsPlatform.initialize({ clientId: "[clientId]" }); console.log("Transmit Security platform initialized"); fill_token(); } else {/ console.error("Transmit Security platform failed to load"); } }; </script>
Povolení verzí rozložení javascriptu a stránek v Azure AS B2C
Hostování stránky HTML na webovém koncovém bodu s podporou sdílení prostředků mezi zdroji (CORS) vytvořením účtu úložiště a přidáním podpory CORS pro Azure Storage
Krok 3: Vytvoření funkce Azure Functions
Azure AD B2C může prostřednictvím konektoru rozhraní API získat doporučení ohledně rizika. Předání tohoto požadavku prostřednictvím zprostředkujícího webového rozhraní API (například pomocí Azure Functions) poskytuje větší flexibilitu v logice implementace.
Pomocí těchto kroků vytvořte funkci Azure, která pomocí tokenu akce z front-endové aplikace získá doporučení z koncového bodu Přenos DRS.
Vytvořte vstupní bod funkce Azure, což je funkce aktivovaná protokolem HTTP, která zpracovává příchozí požadavky HTTP.
public static async Task<HttpResponseMessage> Run(HttpRequest req, ILogger log) { // Function code goes here }
Extrahujte token akce z požadavku. Vaše vlastní zásada definuje, jak předat požadavek v parametrech řetězce dotazu nebo textu.
// Checks for the action token in the query string string actionToken = req.Query["actiontoken"]; // Checks for the action token in the request body string requestBody = await new StreamReader(req.Body).ReadToEndAsync(); dynamic data = JsonConvert.DeserializeObject(requestBody); actionToken = actionToken ?? data?.actiontoken;
Ověřte token akce tak, že zkontrolujete, že zadaná hodnota není prázdná nebo null:
// Returns an error response if the action token is missing if (string.IsNullOrEmpty(actionToken)) { var respContent = new { version = "1.0.0", status = (int)HttpStatusCode.BadRequest, userMessage = "Invalid or missing action token" }; var json = JsonConvert.SerializeObject(respContent); log.LogInformation(json); return new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new StringContent(json, Encoding.UTF8, "application/json") }; }
Zavolejte rozhraní Transmit DRS API. Klientské ID a klientský tajný klíč získané v kroku 1 by měly být použity k generování bearer tokenů pro autorizaci API. Nezapomeňte do
local.settings.json
souboru přidat potřebné proměnné prostředí (například ClientId a ClientSecret).HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Add("Authorization", $"Bearer {transmitSecurityApiKey}"); // Add code here that sends this GET request: // https://api.transmitsecurity.io/risk/v1/recommendation?action_token=[YOUR_ACTION_TOKEN] HttpResponseMessage response = await client.GetAsync(urlWithActionToken);
Zpracování odpovědi rozhraní API Následující kód předá odpověď rozhraní API v případě úspěchu; v opačném případě zpracovává všechny chyby.
if (response.IsSuccessStatusCode) { log.LogInformation(responseContent); return new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(responseContent, Encoding.UTF8, "application/json") }; } else { var errorContent = new { version = "1.0.0", status = (int)response.StatusCode, userMessage = "Error calling Transmit Security API" }; var json = JsonConvert.SerializeObject(errorContent); log.LogError(json); return new HttpResponseMessage(response.StatusCode) { Content = new StringContent(json, Encoding.UTF8, "application/json") }; }
Krok 4: Konfigurace vlastních zásad
Do aplikace Azure B2C zahrnete přenos DRS rozšířením vlastních zásad.
Stáhněte si úvodní balíček vlastních zásad , abyste mohli začít (viz Vytvoření vlastních zásad v Azure AD B2C).
Vytvořte nový soubor, který dědí z TrustFrameworkExtensions. Tento rozšíření základní politiky zahrnuje přizpůsobení konkrétnímu tenantovi pro použití Transmit DRS.
<BasePolicy> <TenantId>YOUR AZURE TENANT</TenantId> <PolicyId>B2C_1A_TrustFrameworkExtensions</PolicyId> </BasePolicy>
BuildingBlocks
V části definujteactiontoken
,ts-drs-response
ats-drs-recommendation
jako nároky:<BuildingBlocks> <ClaimsSchema> <ClaimType Id="ts-drs-response"> <DisplayName>ts-drs-response</DisplayName> <DataType>string</DataType> <UserHelpText>Parameter provided to the DRS service for the response</UserHelpText> <UserInputType>TextBox</UserInputType> </ClaimType> <ClaimType Id="actiontoken"> <DisplayName>actiontoken</DisplayName> <DataType>string</DataType> <UserHelpText /> <UserInputType>TextBox</UserInputType> </ClaimType> <ClaimType Id="ts-drs-recommendation"> <DisplayName>recommendation</DisplayName> <DataType>string</DataType> <UserHelpText /> <UserInputType>TextBox</UserInputType> </ClaimType> </ClaimsSchema> <BuildingBlocks>
BuildingBlocks
V části přidejte odkaz na vlastní uživatelské rozhraní:<BuildingBlocks> <ClaimsSchema> <!-- your claim schemas--> </ClaimsSchema> <ContentDefinitions> <ContentDefinition Id="api.selfasserted"> <!-- URL of your hosted custom HTML file--> <LoadUri>YOUR_SIGNIN_PAGE_URL</LoadUri> </ContentDefinition> </ContentDefinitions> </BuildingBlocks>
V části
ClaimsProviders
nakonfigurujte poskytovatele deklarací, který obsahuje následující technické profily: jeden (SelfAsserted-LocalAccountSignin-Email
), který generuje token akce, a druhý (login-DRSCheck
, v našem příkladu) pro funkci Azure, která přijímá token akce jako vstup a generuje doporučení rizika.<ClaimsProviders> <ClaimsProvider> <DisplayName>Sign in using DRS</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email"> <DisplayName>Local Account Sign-in</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <Item Key="SignUpTarget">SignUpWithLogonEmailExchange</Item> <Item Key="setting.operatingMode">Email</Item> <Item Key="setting.showSignupLink">true</Item> <Item Key="setting.showCancelButton">false</Item> <Item Key="ContentDefinitionReferenceId">api.selfasserted</Item> <Item Key="language.button_continue">Sign In</Item> </Metadata> <IncludeInSso>false</IncludeInSso> <InputClaims> <InputClaim ClaimTypeReferenceId="signInName" /> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="signInName" Required="true" /> <OutputClaim ClaimTypeReferenceId="password" Required="true" /> <OutputClaim ClaimTypeReferenceId="objectId" /> <OutputClaim ClaimTypeReferenceId="authenticationSource" /> <!-- Outputs the action token value provided by the frontend--> <OutputClaim ClaimTypeReferenceId="ts-drs-response" /> </OutputClaims> <ValidationTechnicalProfiles> <ValidationTechnicalProfile ReferenceId="login-DRSCheck" /> <ValidationTechnicalProfile ReferenceId="login-NonInteractive" /> </ValidationTechnicalProfiles> </TechnicalProfile> <TechnicalProfile Id="login-DRSCheck"> <DisplayName>DRS check to validate the interaction and device </DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <!-- Azure Function App --> <Item Key="ServiceUrl">YOUR_FUNCTION_URL</Item> <Item Key="AuthenticationType">None</Item> <Item Key="SendClaimsIn">Body</Item> <!-- JSON, Form, Header, and Query String formats supported --> <Item Key="ClaimsFormat">Body</Item> <!-- Defines format to expect claims returning to B2C --> <!-- REMOVE the following line in production environments --> <Item Key="AllowInsecureAuthInProduction">true</Item> </Metadata> <InputClaims> <!-- Receives the action token value as input --> <InputClaim ClaimTypeReferenceId="ts-drs-response" PartnerClaimType="actiontoken" DefaultValue="0" /> </InputClaims> <OutputClaims> <!-- Outputs the risk recommendation value returned by Transmit (via the Azure function) --> <OutputClaim ClaimTypeReferenceId="ts-drs-recommendation" PartnerClaimType="recommendation.type" /> </OutputClaims> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider> </ClaimsProviders>
V části
UserJourneys
vytvořte novou cestu uživatele (SignInDRS
v našem příkladu), která identifikuje uživatele a provede příslušné kroky ochrany identity na základě doporučení pro riziko přenosu. Cesta může například pokračovat normálně, pokud přenos vrátí povolení nebo důvěru, ukončí se a informuje uživatele o problému, pokud je odepřen, nebo v případě výzvy aktivuje proces ověření zvýšené úrovně.
<UserJourneys>
<UserJourney Id="SignInDRS">
<OrchestrationSteps>
<!-- Step that identifies the user by email and stores the action token -->
<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.selfasserted">
<ClaimsProviderSelections>
<ClaimsProviderSelection ValidationClaimsExchangeId="LocalAccountSigninEmailExchange" />
</ClaimsProviderSelections>
<ClaimsExchanges>
<ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-Email" />
</ClaimsExchanges>
</OrchestrationStep>
<!-- Step to perform DRS check -->
<OrchestrationStep Order="2" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="DRSCheckExchange" TechnicalProfileReferenceId="login-DRSCheck" />
</ClaimsExchanges>
</OrchestrationStep>
<!-- Conditional step for ACCEPT or TRUST -->
<OrchestrationStep Order="3" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimEquals" ExecuteActionsIf="false">
<Value>ts-drs-recommendation</Value>
<Value>ACCEPT</Value>
<Value>TRUST</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<!-- Define the ClaimsExchange or other actions for ACCEPT or TRUST -->
</OrchestrationStep>
<!-- Conditional step for CHALLENGE -->
<OrchestrationStep Order="4" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimEquals" ExecuteActionsIf="false">
<Value>ts-drs-recommendation</Value>
<Value>CHALLENGE</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<!-- Define the ClaimsExchange or other actions for CHALLENGE -->
</OrchestrationStep>
<!-- Conditional step for DENY -->
<OrchestrationStep Order="5" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimEquals" ExecuteActionsIf="false">
<Value>ts-drs-recommendation</Value>
<Value>DENY</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<!-- Define the ClaimsExchange or other actions for DENY -->
</OrchestrationStep>
</UserJourney>
</UserJourneys>
Uložte soubor zásad jako
DRSTrustFrameworkExtensions.xml
.Vytvořte nový soubor, který dědí ze souboru, který jste uložili. Rozšiřuje politiku přihlášení, která funguje jako vstupní bod pro uživatelské procesy registrace a přihlášení pomocí systému Transmit DRS.
<BasePolicy> <TenantId>YOUR AZURE TENANT</TenantId> <PolicyId>B2C_1A_DRSTrustFrameworkExtensions</PolicyId> </BasePolicy>
RelyingParty
V této části nakonfigurujte cestu uživatele s vylepšenou službou DRS (SignInDRS
v našem příkladu).<RelyingParty> <DefaultUserJourney ReferenceId="SignInDRS" /> <UserJourneyBehaviors> <ScriptExecution>Allow</ScriptExecution> </UserJourneyBehaviors> <TechnicalProfile Id="PolicyProfile"> <DisplayName>PolicyProfile</DisplayName> <Protocol Name="OpenIdConnect" /> <OutputClaims> <OutputClaim ClaimTypeReferenceId="displayName" /> <OutputClaim ClaimTypeReferenceId="givenName" /> <OutputClaim ClaimTypeReferenceId="surname" /> <OutputClaim ClaimTypeReferenceId="email" /> <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" /> </OutputClaims> <SubjectNamingInfo ClaimType="sub" /> </TechnicalProfile> </RelyingParty>
Uložte soubor zásad jako
DRSSignIn.xml
.
Nahrajte vlastní politiku
Pomocí adresáře s tenantem Azure AD B2C nahrajte vlastní zásady:
- Přihlaste se do Azure Portalu.
- Na panelu nástrojů portálu vyberte Adresáře a předplatná.
- V nastavení portálu | Na stránce Adresáře a předplatná v seznamu názvů adresářů vyhledejte adresář Azure AD B2C a pak vyberte Přepnout.
- V části Zásady vyberte Architekturu prostředí identit.
- Vyberte Nahrát vlastní zásady a pak nahrajte aktualizované soubory vlastních zásad.
Krok 6: Testování vlastních zásad
Pomocí adresáře s tenantem Azure AD B2C otestujte vlastní zásady:
- V tenantovi Azure AD B2C a v části Zásady vyberte Architekturu prostředí identit.
- V části Vlastní zásady vyberte zásadu přihlášení.
- V části Aplikace vyberte webovou aplikaci, kterou jste zaregistrovali.
- Vyberte Spustit.
- Dokončete tok uživatele.
Další kroky
- Ptejte se na Stack Overflow
- Přehled vlastních zásad Azure AD B2C