Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Importante
A partir de 1º de maio de 2025, o Azure AD B2C não estará mais disponível para compra para novos clientes. Saiba mais nas nossas Perguntas Frequentes.
Neste tutorial, aprenda a integrar a autenticação do Azure Ative Directory B2C (Azure AD B2C) com os Serviços de Deteção e Resposta (DRS) do Transmit Security. O Transmit Security permite detetar riscos nas interações do cliente em canais digitais e permitir decisões informadas de identidade e confiança em toda a experiência do consumidor.
Este recurso está disponível apenas para políticas personalizadas. Para as etapas de configuração, selecione Política personalizada no seletor anterior.
Descrição do cenário
Uma integração de Deteção e Resposta de Transmissão inclui os seguintes componentes:
- Locatário do Azure AD B2C: autentica o utilizador e aloja um script que coleta informações do dispositivo à medida que os utilizadores executam uma política alvo. Bloqueia ou questiona as tentativas de início de sessão/criação de conta baseada na recomendação de risco devolvida pelo Transmit.
- Modelos de interface do usuário personalizados: personaliza o conteúdo HTML das páginas renderizadas pelo Azure AD B2C. Essas páginas incluem os trechos de JavaScript necessários para a deteção de risco de transmissão.
- Serviço de coleta de dados de transmissão: script incorporado dinamicamente que registra informações do dispositivo, que é usado para avaliar continuamente o risco durante as interações do usuário.
- Transmitir ponto de extremidade da API DRS: Fornece a recomendação de risco com base nos dados coletados. O Azure AD B2C comunica-se com este ponto de extremidade usando um conector de API REST.
- Azure Functions: seu ponto de extremidade de API hospedado que é usado para obter uma recomendação do ponto de extremidade da API Transmit DRS por meio do conector de API.
O diagrama de arquitetura a seguir ilustra a implementação descrita no guia:
- O utilizador inicia sessão com o Azure AD B2C.
- Uma página personalizada inicializa o SDK de transmissão, que inicia o streaming de informações do dispositivo para o Transmit.
- O Azure AD B2C relata um evento de ação de início de sessão para o Transmit, a fim de obter um token de ação.
- Transmit fornece um token de ação e o Azure AD B2C prossegue com o registo ou início de sessão do utilizador.
- Depois que o utilizador entrar, o Azure AD B2C solicita uma recomendação de risco à Transmit por meio da Azure Function.
- A Função do Azure envia o pedido de recomendação com o token de ação.
- Transmitir retorna uma recomendação (desafiar/permitir/negar) com base nas informações coletadas do dispositivo.
- A Função Azure passa o resultado da recomendação para o Azure AD B2C para tratá-lo adequadamente.
- O Azure AD B2C executa mais etapas, se necessário, como a autenticação multifator, e conclui o fluxo de inscrição ou entrada.
Pré-requisitos
- Uma assinatura do Microsoft Entra. Se não tiver uma, obtenha uma conta gratuita
- Um locatário do Azure AD B2C vinculado à assinatura do Entra
- Uma aplicação web registada no seu inquilino do Azure AD B2C
- Políticas personalizadas do Azure AD B2C
- Um cliente da Transmit Security. Ir para transmitsecurity.com
Etapa 1: Criar um aplicativo Transmit
Entre no Portal de Administração do Transmit e crie um aplicativo:
Em Aplicativos, selecione Adicionar aplicativo.
Configure o aplicativo com os seguintes atributos:
Propriedade Descrição Nome do aplicativo Nome do aplicativo Nome do cliente Nome do cliente Redirecionar URIs Insira o URL do seu site. Este atributo é um campo obrigatório, mas não é usado para este fluxo Selecione Adicionar.
Após o registo, é apresentado um ID do Cliente e um Segredo do Cliente . Registre os valores para uso posterior.
Etapa 2: criar sua interface do usuário personalizada
Comece integrando o Transmit DRS ao aplicativo frontend B2C. Crie uma página de entrada personalizada que integre o SDK de transmissão e substitua a página de entrada padrão do Azure AD B2C.
Uma vez ativado, o Transmit DRS começa a coletar informações para o usuário que interage com seu aplicativo. Transmitir DRS retorna um token de ação que o Azure AD B2C precisa para recomendação de risco.
Para integrar o Transmit DRS na página de início de sessão B2C, siga estas etapas:
Prepare um arquivo HTML personalizado para sua página de entrada com base nos modelos de exemplo. Adicione o script a seguir para carregar e inicializar o SDK de transmissão e obter um token de ação. O token de ação retornado deve ser armazenado em um elemento HTML oculto (
ts-drs-responseneste exemplo).<!-- 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>Habilite JavaScript e versões de layout de página no Azure AS B2C.
Hospede a página HTML em um ponto de extremidade da Web habilitado para CORS (Compartilhamento de Recursos entre Origens) criando uma conta de armazenamento e adicionando suporte a CORS para o Armazenamento do Azure.
Etapa 3: Criar uma função do Azure
O Azure AD B2C pode obter uma recomendação de risco do Transmit usando um conector de API. Passar essa solicitação por meio de uma API Web intermediária (como usar o Azure Functions) fornece mais flexibilidade em sua lógica de implementação.
Siga estas etapas para criar uma função do Azure que usa o token de ação da aplicação frontend para obter uma recomendação do endpoint Transmit DRS.
Crie o ponto de entrada da sua Função do Azure, uma função acionada por HTTP que processa solicitações HTTP de entrada.
public static async Task<HttpResponseMessage> Run(HttpRequest req, ILogger log) { // Function code goes here }Extraia o token de ação da solicitação. A sua política personalizada define como enviar a solicitação, nos parâmetros de query string ou no corpo.
// 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;Valide o token de ação verificando se o valor fornecido não está vazio ou nulo:
// 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") }; }Chame a API Transmit DRS. O ID do Cliente de Transmissão e o Segredo do Cliente obtidos na Etapa 1 devem ser usados para gerar tokens de portador para autorização de API. Certifique-se de adicionar as variáveis de ambiente necessárias (como ClientId e ClientSecret) em seu
local.settings.jsonarquivo.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);Processe a resposta da API. O código a seguir encaminha a resposta da API se for bem-sucedida; caso contrário, lida com quaisquer erros.
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") }; }
Etapa 4: Configurar suas políticas personalizadas
Você incorpora o Transmit DRS em seu aplicativo Azure B2C estendendo suas políticas personalizadas.
Baixe o pacote inicial de políticas personalizadas para começar (consulte Criar políticas personalizadas no Azure AD B2C)
Crie um novo ficheiro que herde de TrustFrameworkExtensions, o qual estende a política base com personalizações específicas do tenant para Transmit DRS.
<BasePolicy> <TenantId>YOUR AZURE TENANT</TenantId> <PolicyId>B2C_1A_TrustFrameworkExtensions</PolicyId> </BasePolicy>BuildingBlocksNa seção, definaactiontoken,ts-drs-responseets-drs-recommendationcomo reivindicações:<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>BuildingBlocksNa seção , adicione uma referência à sua interface do usuário personalizada:<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>Na seção
ClaimsProviders, configure um provedor de declarações que inclua os seguintes perfis técnicos: um (SelfAsserted-LocalAccountSignin-Email) que emite o token de ação, e outro (login-DRSCheckem nosso exemplo) para a função do Azure que recebe o token de ação como entrada e emite a recomendação de risco.<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>Na seção
UserJourneys, crie uma nova jornada do utilizador (SignInDRSno nosso exemplo) que identifique o utilizador e execute as etapas apropriadas de proteção de identidade com base na recomendação de risco do Transmit. Por exemplo, a viagem pode prosseguir normalmente se a Transmissão retornar permitir ou confiar, caso negue, encerrar e informar o utilizador sobre o problema, ou acionar um processo de autenticação de nível superior se desafiar.
<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>
Salve o arquivo de política como
DRSTrustFrameworkExtensions.xml.Crie um novo arquivo que herda do arquivo que você salvou. Ele estende a política de entrada que funciona como um ponto de entrada para as jornadas do usuário de inscrição e login com o Transmit DRS.
<BasePolicy> <TenantId>YOUR AZURE TENANT</TenantId> <PolicyId>B2C_1A_DRSTrustFrameworkExtensions</PolicyId> </BasePolicy>RelyingPartyNa seção , configure sua jornada de usuário aprimorada pelo DRS (SignInDRSno nosso exemplo).<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>Salve o arquivo de política como
DRSSignIn.xml.
Etapa 5: carregar a política personalizada
Usando o diretório com o seu inquilino do Azure AD B2C, carregue a política personalizada:
- Inicie sessão no portal Azure.
- Na barra de ferramentas do portal, selecione Diretórios + assinaturas.
- Nas configurações do Portal | Página Diretórios + assinaturas , na lista Nome do diretório , localize o diretório do Azure AD B2C e selecione Alternar.
- Em Políticas, selecione Identity Experience Framework.
- Selecione Carregar política personalizada e, em seguida, carregue os arquivos de política personalizada atualizados.
Etapa 6: Testar sua política personalizada
Usando o diretório com a sua instância do Azure AD B2C, teste a sua política personalizada:
- No locatário do Azure AD B2C e em Políticas, selecione Identity Experience Framework.
- Em Políticas personalizadas, selecione a Política de login.
- Em Aplicativo, selecione o aplicativo Web que você registrou.
- Selecione Executar agora.
- Conclua o fluxo do usuário.
Próximos passos
- Faça perguntas sobre Estouro de pilha
- Confira a visão geral da política personalizada do Azure AD B2C