Criar um aplicativo Web ASP.NET com inscrição/entrada, edição de perfil e redefinição de senha do Azure Active Directory B2CCreate an ASP.NET web app with Azure Active Directory B2C sign-up, sign-in, profile edit, and password reset

Este tutorial mostra como:This tutorial shows you how to:

  • Adicionar recursos de identidade do Azure AD B2C ao seu aplicativo WebAdd Azure AD B2C identity features to your web app
  • Registrar seu aplicativo Web em seu diretório do Azure AD B2CRegister your web app in your Azure AD B2C directory
  • Criar inscrição/entrada, edição de perfil e política de redefinição de senha de usuário para o seu aplicativo WebCreate a user sign-up/sign-in, profile edit, and password reset policy for your web app

Pré-requisitosPrerequisites

  • Você deve conectar seu Locatário B2C a uma conta do Azure.You must connect your B2C Tenant to an Azure account. Você pode criar uma conta gratuita do Azure aqui.You can create a free Azure account here.
  • Você precisa do Microsoft Visual Studio ou um programa semelhante para exibir e modificar o código de exemplo.You need Microsoft Visual Studio or a similar program to view and modify the sample code.

Criar um diretório do AD B2C do AzureCreate an Azure AD B2C directory

Antes de usar AD B2C do Azure, você deve criar um diretório ou locatário.Before you can use Azure AD B2C, you must create a directory, or tenant. Um diretório é um contêiner para todos os seus usuários, aplicativos, grupos e muito mais.A directory is a container for all your users, apps, groups, and more. Se você ainda não tiver um, crie um diretório B2C antes de prosseguir neste guia.If you don't have one already, create a B2C directory before you continue in this guide.

Clique no botão Novo.Click the New button. No campo Pesquisar no Marketplace, insira Azure Active Directory B2C.In the Search the marketplace field, enter Azure Active Directory B2C.

Botão Adicionar realçado, e o texto Azure Active Directory B2C na pesquisa no campo do marketplace

Na lista de resultados, selecione Azure Active Directory B2C.In the results list, select Azure Active Directory B2C.

Azure Active Directory B2C selecionado na lista de resultados

Alguns detalhes sobre o Azure Active Directory B2C são exibidos.Details about Azure Active Directory B2C are shown. Para começar a configurar seu novo locatário do Azure Active Directory B2C, clique no botão Criar.To begin configuring your new Azure Active Directory B2C tenant, click the Create button.

Selecione Criar um novo Locatário Azure AD B2C.Select Create a new Azure AD B2C Tenant. As configurações especificadas na tabela a seguir usam o nome da empresa Contoso como exemplo.The settings specified in the following table use the company name Contoso as an example. Você precisará fornecer o nome da sua própria organização e um nome exclusivo de locatário ao criar o locatário.You will need to provide your own organization name and a unique tenant name when creating your tenant.

Azure AD B2C cria locatário com texto de exemplo nos campos disponíveis

ConfiguraçãoSetting Valor de exemploSample value DescriçãoDescription
Nome da organizaçãoOrganization name ContosoContoso Nome da organização.Name of the organization.
Nome de domínio inicialInitial domain name ContosoB2CTenantContosoB2CTenant Nome de domínio para o locatário B2C.Domain name for the B2C tenant. Por padrão, o nome de domínio inicial inclui .onmicrosoft.com. Se você está criando um locatário de teste, escolha um nome que não remeta à produção, como ContosoB2CTesting.By default, the initial domain name includes .onmicrosoft.com. If you are creating a test tenant, choose a non-production name such as ContosoB2CTesting.
País ou regiãoCountry or region Estados UnidosUnited States Escolha o país ou região para o diretório.Choose the country or region for the directory. O diretório será criado nesse local e não poderá ser alterado posteriormente.The directory will be created in this location and cannot be changed later.

Clique no botão Criar para criar seu locatário.Click the Create button to create your tenant. A criação do locatário pode levar alguns minutos.Creating the tenant may take a few minutes. Você receberá um alerta em suas notificações após a conclusão.You are alerted in your notifications when it is complete.

Observação

Você precisa se conectar ao Locatário B2C para sua assinatura do Azure.You need to connect the B2C Tenant to your Azure subscription. Depois de selecionar Criar, selecione a opção Associar um Locatário do Azure AD B2C existente à minha assinatura do Azure e, em seguida, na lista suspensa de Locatário do Azure AD B2C, selecione o locatário que você deseja associar.After selecting Create, select the Link an existing Azure AD B2C Tenant to my Azure subscription option, and then in the Azure AD B2C Tenant drop down, select the tenant you want to associate.

Criar e registrar um aplicativoCreate and register an application

Em seguida, você precisa criar e registrar um aplicativo em seu diretório B2C.Next, you need to create and register the app in your B2C directory. Isso fornece ao Azure AD B2C as informações de que ele precisa para se comunicar de forma segura com seu aplicativo.This provides information that Azure AD B2C needs to securely communicate with your app.

Nas configurações de B2C, clique em Aplicativos e depois em +Adicionar.In the B2C settings, click Applications and then click + Add.

Botão + Adicionar em aplicativos

Para registrar sua API da Web, use as configurações especificadas na tabela.To register your web API, use the settings specified in the table.

Exemplo de configurações de registro para nova API Web

ConfiguraçãoSetting Valor de exemploSample value DescriçãoDescription
NomeName API B2C da ContosoContoso B2C API Insira um Nome para o aplicativo que descreva sua API aos consumidores.Enter a Name for the application that describes your API to consumers.
Incluir aplicativo Web/API WebInclude web app / web API SimYes Selecione Sim para uma API Web.Select Yes for a web API.
Permitir fluxo implícitoAllow implicit flow SimYes Escolha Sim se o seu aplicativo usar Entrada do OpenID ConnectSelect Yes if your application uses OpenID Connect sign-in
URL de RespostaReply URL https://localhost:44316/ As URLs de Resposta são pontos de extremidade para onde o Azure AD B2C retorna quaisquer tokens que seus aplicativo solicitarem.Reply URLs are endpoints where Azure AD B2C returns any tokens that your application requests. Insira uma URL de Resposta apropriada.Enter a proper Reply URL. Neste exemplo, a sua API Web é local e escuta na porta 44316.In this example, your web API is local and listening on port 44316.
URI da ID do AplicativoApp ID URI apiapi O URI da ID do Aplicativo é o identificador usado para sua API Web.The App ID URI is the identifier used for your web API. O URI do identificador completo, incluindo o domínio, é gerado para você.The full identifier URI including the domain is generated for you.

Clique em Criar para registrar seu aplicativo.Click Create to register your application.

Seu aplicativo recém-registrado é exibido na lista de aplicativos para o locatário B2C.Your newly registered application is displayed in the applications list for the B2C tenant. Selecione sua API Web na lista.Select your web API from the list. O painel de propriedade da API é exibido.The API's property pane is displayed.

Propriedades da API Web

Anote o identificador global exclusivo ID do Cliente do Aplicativo.Make note of the globally unique Application Client ID. Use a ID no código do seu aplicativo.You use the ID in your application's code.

Importante

Não é possível usar aplicativos registrados na guia Aplicativos no Portal de Gerenciamento do Azure para fazer isso.You cannot use applications registered in the Applications tab on the classic Azure Management Portal for this.

Quando você terminar, você terá uma API e um aplicativo nativo nas suas configurações de aplicativo.When you are done, you will have both an API and a native application in your application settings.

Criar políticas em seu locatário B2CCreate policies on your B2C tenant

No AD B2C do Azure, cada experiência do usuário é definida por uma política.In Azure AD B2C, every user experience is defined by a policy. Este exemplo de código contém três experiências de identidade: inscrição e entrada, edição de perfil e redefinição de senha.This code sample contains three identity experiences: sign-up & sign-in, profile edit, and password reset. Você precisa criar uma política de cada tipo, conforme descrito no artigo de referência de política.You need to create one policy of each type, as described in the policy reference article. Para cada política, certifique-se de selecionar a declaração ou atributo de Nome de exibição e copiar o nome da sua política para uso posterior.For each policy, be sure to select the Display name attribute or claim, and to copy down the name of your policy for later use.

Adicionar seus provedores de identidadeAdd your identity providers

Nas configurações, selecione Provedores de Identidade e escolha Inscrição do nome de usuário ou Inscrição de email.From your settings, select Identity Providers and choose Username signup or Email signup.

Criar uma política de inscrição e entradaCreate a sign-up and sign-in policy

Para habilitar a entrada no aplicativo, você precisará criar uma política de entrada.To enable sign-in on your application, you will need to create a sign-in policy. Essa política descreve as experiências pelas quais os consumidores passarão durante a entrada e o conteúdo de tokens que o aplicativo receberá de entradas bem-sucedidas.This policy describes the experiences that consumers will go through during sign-in and the contents of tokens that the application will receive on successful sign-ins.

Selecione Azure AD B2C da lista de serviços no Portal do Azure.Select Azure AD B2C from the services list in the Azure portal.

Selecione o serviço B2C

Na seção de políticas das configurações, selecione Políticas de inscrição ou entrada e clique em + Adicionar.In the policies section of settings, select Sign-up or sign-in policies and click + Add.

Selecione as políticas de inscrição ou entrada e clique no botão Adicionar

Insira um Nome de política para referência de seu aplicativo.Enter a policy Name for your application to reference. Por exemplo, insira: SiUpIn.For example, enter SiUpIn.

Selecione Provedores de identidade e marque Inscrição por email.Select Identity providers and check Email signup. Opcionalmente, você também pode selecionar provedores de identidade social, se já configurado.Optionally, you can also select social identity providers, if already configured. Clique em OK.Click OK.

Selecione Inscrição por email como provedor de identidade e clique no botão OK

Selecione Atributos de inscrição.Select Sign-up attributes. Escolha os atributos que você deseja coletar do consumidor durante a inscrição.Choose attributes you want to collect from the consumer during sign-up. Por exemplo, marque País/Região, Nome de Exibição e CEP.For example, check Country/Region, Display Name, and Postal Code. Clique em OK.Click OK.

Selecione alguns atributos e clique no botão OK

Selecione Declarações do aplicativo.Select Application claims. Escolha as declarações que você deseja retornar nos tokens de autorização enviados ao aplicativo após uma experiência de inscrição ou entrada bem-sucedida.Choose claims you want returned in the authorization tokens sent back to your application after a successful sign-up or sign-in experience. Por exemplo, selecione Nome de Exibição, Provedor de Identidade, CEP, Novo Usuário e ID de Objeto do Usuário.For example, select Display Name, Identity Provider, Postal Code, User is new and User's Object ID.

Selecione algumas declarações de aplicativo e clique no botão OK

Clique em Criar para adicionar a política.Click Create to add the policy. A política está listada como B2C_1_SiUpIn.The policy is listed as B2C_1_SiUpIn. O prefixo B2C_1_ está anexado ao nome.The B2C_1_ prefix is appended to the name.

Abra a política selecionando B2C_1_SiUpIn.Open the policy by selecting B2C_1_SiUpIn. Verifique as configurações especificadas na tabela e, depois, clique em Executar agora.Verify the settings specified in the table then click Run now.

Selecione a política e execute-a

ConfiguraçãoSetting ValorValue
AplicativosApplications Aplicativo B2C da ContosoContoso B2C app
Selecionar URL de respostaSelect reply url https://localhost:44316/

Uma nova guia do navegador é aberta e você poderá verificar a experiência de inscrição ou entrada do consumidor, conforme configurado.A new browser tab opens, and you can verify the sign-up or sign-in consumer experience as configured.

Observação

Leva até um minuto para a criação de políticas e as atualizações entrem em vigor.It takes up to a minute for policy creation and updates to take effect.

Criar uma política de edição de perfilCreate a profile editing policy

Para habilitar a edição de perfil no aplicativo, você precisará criar uma política de edição de perfil.To enable profile editing on your application, you will need to create a profile editing policy. Essa política descreve as experiências pelas quais os consumidores passarão durante a edição do perfil e o conteúdo de tokens que o aplicativo receberá na conclusão bem-sucedida.This policy describes the experiences that consumers will go through during profile editing and the contents of tokens that the application will receive on successful completion.

Selecione Azure AD B2C da lista de serviços no Portal do Azure.Select Azure AD B2C from the services list in the Azure portal.

Selecione o serviço B2C

Na seção de políticas das configurações, selecione Políticas de edição de perfil e clique em + Adicionar.In the policies section of settings, select Profile editing policies and click + Add.

Selecione as Políticas de edição de perfil e clique no botão Adicionar

Insira um Nome de política para referência de seu aplicativo.Enter a policy Name for your application to reference. Por exemplo, insira: SiPe.For example, enter SiPe.

Clique em Provedores de identidade e marque Entrada na Conta Local.Select Identity providers and check Local Account Signin. Opcionalmente, você também pode selecionar provedores de identidade social, se já configurado.Optionally, you can also select social identity providers, if already configured. Clique em OK.Click OK.

Selecione Inscrição na Conta Local como provedor de identidade e clique no botão OK

Selecione Atributos do perfil.Select Profile attributes. Escolha os atributos que o consumidor pode exibir e editar no perfil.Choose attributes the consumer can view and edit in their profile. Por exemplo, marque País/Região, Nome de Exibição e CEP.For example, check Country/Region, Display Name, and Postal Code. Clique em OK.Click OK.

Selecione alguns atributos e clique no botão OK

Selecione Declarações do aplicativo.Select Application claims. Escolha as declarações que você quer retornar nos tokens de autorização enviados ao aplicativo após uma experiência de edição de perfil bem-sucedida.Choose claims you want returned in the authorization tokens sent back to your application after a successful profile editing experience. Por exemplo, selecione Nome de Exibição e CEP.For example, select Display Name, Postal Code.

Selecione algumas declarações de aplicativo e clique no botão OK

Clique em Criar para adicionar a política.Click Create to add the policy. A política está listada como B2C_1_SiPe.The policy is listed as B2C_1_SiPe. O prefixo B2C_1_ está anexado ao nome.The B2C_1_ prefix is appended to the name.

Abra a política selecionando B2C_1_SiPe.Open the policy by selecting B2C_1_SiPe. Verifique as configurações especificadas na tabela e, depois, clique em Executar agora.Verify the settings specified in the table then click Run now.

Selecione a política e execute-a

ConfiguraçãoSetting ValorValue
AplicativosApplications Aplicativo B2C da ContosoContoso B2C app
Selecionar URL de respostaSelect reply url https://localhost:44316/

Uma nova guia do navegador é aberta e você poderá verificar a experiência de edição de perfil do consumidor, conforme configurado.A new browser tab opens, and you can verify the profile editing consumer experience as configured.

Observação

Leva até um minuto para a criação de políticas e as atualizações entrem em vigor.It takes up to a minute for policy creation and updates to take effect.

Criar uma política de redefinição de senhaCreate a password reset policy

Para habilitar a redefinição de senha refinada, você precisará criar uma política de redefinição de senha.To enable fine-grained password reset on your application, you will need to create a password reset policy. Observe que a opção de redefinição de senha para todo o locatário é especificada aqui.Note that the tenant-wide password reset option specified here. Essa política descreve as experiências pelas quais os consumidores passarão durante a redefinição da senha e o conteúdo de tokens que o aplicativo receberá na conclusão bem-sucedida.This policy describes the experiences that the consumers will go through during password reset and the contents of tokens that the application will receive on successful completion.

Selecione Azure AD B2C da lista de serviços no Portal do Azure.Select Azure AD B2C from the services list in the Azure portal.

Selecione o serviço B2C

Na seção de políticas das configurações, selecione Políticas de redefinição de senha e clique em + Adicionar.In the policies section of settings, select Password reset policies and click + Add.

Selecione as políticas de inscrição ou entrada e clique no botão Adicionar

Insira um Nome de política para referência de seu aplicativo.Enter a policy Name for your application to reference. Por exemplo, insira: SSPR.For example, enter SSPR.

Selecione Provedores de identidade e marque Redefinir senha usando endereço de email.Select Identity providers and check Reset password using email address. Clique em OK.Click OK.

Selecione Redefinir senha usando endereço de email como provedor de identidade e clique no botão OK

Selecione Declarações do aplicativo.Select Application claims. Escolha as declarações que você quer retornar nos tokens de autorização enviados ao seu aplicativo após uma experiência de redefinição de senha bem-sucedida.Choose claims you want returned in the authorization tokens sent back to your application after a successful password reset experience. Por exemplo, selecione ID de Objeto do Usuário.For example, select User's Object ID.

Selecione algumas declarações de aplicativo e clique no botão OK

Clique em Criar para adicionar a política.Click Create to add the policy. A política está listada como B2C_1_SSPR.The policy is listed as B2C_1_SSPR. O prefixo B2C_1_ está anexado ao nome.The B2C_1_ prefix is appended to the name.

Abra a política selecionando B2C_1_SSPR.Open the policy by selecting B2C_1_SSPR. Verifique as configurações especificadas na tabela e, depois, clique em Executar agora.Verify the settings specified in the table then click Run now.

Selecione a política e execute-a

ConfiguraçãoSetting ValorValue
AplicativosApplications Aplicativo B2C da ContosoContoso B2C app
Selecionar URL de respostaSelect reply url https://localhost:44316/

Uma nova guia do navegador é aberta e você pode verificar a experiência de redefinição de senha do consumidor em seu aplicativo.A new browser tab opens, and you can verify the password reset consumer experience in your application.

Observação

Leva até um minuto para a criação de políticas e as atualizações entrem em vigor.It takes up to a minute for policy creation and updates to take effect.

Depois de criar as políticas, você estará pronto para compilar o aplicativo.After you create your policies, you're ready to build your app.

Baixe o código de exemploDownload the sample code

O código para este tutorial é mantido no GitHub.The code for this tutorial is maintained on GitHub. Você pode clonar a amostra executando:You can clone the sample by running:

git clone https://github.com/Azure-Samples/active-directory-b2c-dotnet-webapp-and-webapi.git

Depois de baixar o código de exemplo, abra o arquivo .sln do Visual Studio para começar.After you download the sample code, open the Visual Studio .sln file to get started. Agora, sua solução contém dois projetos: TaskWebApp e TaskService.The solution file contains two projects: TaskWebApp and TaskService. TaskWebApp é o aplicativo Web MVC com o qual o usuário interage.TaskWebApp is the MVC web application that the user interacts with. TaskService é API Web back-end do aplicativo que armazena a lista de tarefas de cada usuário.TaskService is the app's back-end web API that stores each user's to-do list. Este artigo discutirá apenas o aplicativo TaskWebApp.This article will only discuss the TaskWebApp application. Para saber como criar TaskService usando o Azure AD B2C, confira nosso tutorial da API Web .NET.To learn how to build TaskService using Azure AD B2C, see our .NET web api tutorial.

Atualizar o código para usar as suas políticas e locatárioUpdate code to use your tenant and policies

Nossa amostra é configurada para usar as políticas e a ID do cliente de nosso locatário de demonstração.Our sample is configured to use the policies and client ID of our demo tenant. Para conectar-se ao seu próprio locatário, você precisa abrir web.config no projeto TaskWebApp e substituir os valores a seguir:To connect it to your own tenant, you need to open web.config in the TaskWebApp project and replace the following values:

  • ida:Tenant pelo nome do locatárioida:Tenant with your tenant name
  • ida:ClientId pela ID de aplicativo do aplicativo Webida:ClientId with your web app application ID
  • ida:ClientSecret pela chave de segredo do aplicativo Webida:ClientSecret with your web app secret key
  • ida:SignUpSignInPolicyId pelo nome da política "Inscrever-se ou Entrar"ida:SignUpSignInPolicyId with your "Sign-up or Sign-in" policy name
  • ida:EditProfilePolicyId pelo nome de política "Editar Perfil"ida:EditProfilePolicyId with your "Edit Profile" policy name
  • ida:ResetPasswordPolicyId pelo nome de política "Redefinir Senha"ida:ResetPasswordPolicyId with your "Reset Password" policy name

Iniciar o aplicativoLaunch the app

No Visual Studio, inicie o aplicativo.From within Visual Studio, launch the app. Navegue até a guia Lista de tarefas e observe que o URl é: https://login.microsoftonline.com/*YourTenantName*/oauth2/v2.0/authorize?p=*YourSignUpPolicyName*&client_id=*YourclientID*.....Navigate to the To-Do List tab, and note the URl is: https://login.microsoftonline.com/*YourTenantName*/oauth2/v2.0/authorize?p=*YourSignUpPolicyName*&client_id=*YourclientID*.....

Inscreva-se no aplicativo usando o seu endereço de email ou nome de usuário.Sign up for the app by using your email address or user name. Saia, em seguida, entre novamente e edite o perfil ou redefina a senha.Sign out, then sign in again and edit the profile or reset the password. Saia e entre como outro usuário.Sign out and sign in as a different user.

Adicionar IDPs sociaisAdd social IDPs

Atualmente, o aplicativo suporta inscrição e entrada usando apenas contas locais; contas armazenadas no seu diretório do B2C que usam um nome de usuário e senha.Currently, the app supports only user sign-up and sign-in by using local accounts; accounts stored in your B2C directory that use a user name and password. Com o Azure AD B2C, você pode adicionar suporte a outros provedores de identidade (IDPs), sem alterar qualquer código.By using Azure AD B2C, you can add support for other identity providers (IDPs) without changing any of your code.

Para adicionar IDPs sociais ao seu aplicativo, comece seguindo as instruções detalhadas nestes artigos.To add social IDPs to your app, begin by following the detailed instructions in these articles. Para cada IDP ao qual deseja oferecer suporte, você precisa registrar um aplicativo no sistema e obter uma ID de cliente.For each IDP you want to support, you need to register an application in that system and obtain a client ID.

Após adicionar provedores de identidade ao seu diretório de B2C, edite cada uma das suas três políticas para incluir os novos IDPs, como descrito no artigo de referência de política.After you add the identity providers to your B2C directory, edit each of your three policies to include the new IDPs, as described in the policy reference article. Depois de salvar as políticas, execute o aplicativo novamente.After you save your policies, run the app again. Você deve ver os novos IDPs adicionados como opções de entrada e de inscrição em cada experiência de identidade.You should see the new IDPs added as sign-in and sign-up options in each of your identity experiences.

Você pode fazer experiências com suas políticas e observar o efeito no exemplo de aplicativo.You can experiment with your policies and observe the effect on your sample app. Adicione ou remova IDPs, manipule declarações de aplicativo ou altere os atributos de inscrição.Add or remove IDPs, manipulate application claims, or change sign-up attributes. Experimente até começar a entender como as políticas, solicitações de autenticação e OWIN funcionam juntos.Experiment until you can see how policies, authentication requests, and OWIN tie together.

Passo a passo do código de exemploSample code walkthrough

As seções a seguir mostram como o código do aplicativo de exemplo está configurado.The following sections show you how the sample application code is configured. Você pode usar isso como um guia no desenvolvimento do seu futuro aplicativo.You may use this as a guide in your future app development.

Adicionar suporte a autenticaçãoAdd authentication support

Agora você pode configurar seu aplicativo para usar o Azure AD B2C.You can now configure your app to use Azure AD B2C. Seu aplicativo se comunica com o Azure AD B2C ao enviar solicitações de autenticação OpenID Connect.Your app communicates with Azure AD B2C by sending OpenID Connect authentication requests. As solicitações determinam a experiência do usuário que o aplicativo deseja executar especificando a política.The requests dictate the user experience your app wants to execute by specifying the policy. Você pode usar a biblioteca OWIN da Microsoft para enviar essas solicitações, executar políticas, gerenciar sessões do usuário e assim por diante.You can use Microsoft's OWIN library to send these requests, execute policies, manage user sessions, and more.

Instalar a OWINInstall OWIN

Para começar, adicione os pacotes do NuGet de middleware do OWIN ao projeto usando o Console do Gerenciador de Pacotes do Visual Studio.To begin, add the OWIN middleware NuGet packages to the project by using the Visual Studio Package Manager Console.

PM> Install-Package Microsoft.Owin.Security.OpenIdConnect
PM> Install-Package Microsoft.Owin.Security.Cookies
PM> Install-Package Microsoft.Owin.Host.SystemWeb

Adicionar uma classe de inicialização da OWINAdd an OWIN startup class

Adicione uma classe de inicialização OWIN para a API chamada Startup.cs.Add an OWIN startup class to the API called Startup.cs. Clique com o botão direito do mouse no projeto, selecione Adicionar e Novo Item e pesquise OWIN.Right-click on the project, select Add and New Item, and then search for OWIN. O middleware OWIN invocará o método Configuration(…) quando seu aplicativo for iniciado.The OWIN middleware will invoke the Configuration(…) method when your app starts.

Em nossa amostra, alteramos a declaração de classe para public partial class Startup e implementamos a outra parte da classe em App_Start\Startup.Auth.cs.In our sample, we changed the class declaration to public partial class Startup and implemented the other part of the class in App_Start\Startup.Auth.cs. No método Configuration, adicionamos uma chamada para ConfigureAuth, que é definida em Startup.Auth.cs.Inside the Configuration method, we added a call to ConfigureAuth, which is defined in Startup.Auth.cs. Após as modificações, Startup.cs é semelhante ao seguinte:After the modifications, Startup.cs looks like the following:

// Startup.cs

public partial class Startup
{
    // The OWIN middleware will invoke this method when the app starts
    public void Configuration(IAppBuilder app)
    {
        // ConfigureAuth defined in other part of the class
        ConfigureAuth(app);
    }
}

Configurar do middleware de autenticaçãoConfigure the authentication middleware

Abra o arquivo App_Start\Startup.Auth.cs e implemente o método ConfigureAuth(...).Open the file App_Start\Startup.Auth.cs and implement the ConfigureAuth(...) method. Os parâmetros que você fornece em OpenIdConnectAuthenticationOptions servem como coordenadas para seu aplicativo se comunicar com o Azure AD B2C.The parameters you provide in OpenIdConnectAuthenticationOptions serve as coordinates for your app to communicate with Azure AD B2C. Se você não especificar certos parâmetros, ele usará o valor padrão.If you do not specify certain parameters, it will use the default value. Por exemplo, não especificamos o ResponseType na amostra, então o valor padrão code id_token será usado em cada solicitação de saída para o Azure AD B2C.For example, we do not specify the ResponseType in the sample, so the default value code id_token will be used in each outgoing request to Azure AD B2C.

Você também precisa configurar a autenticação de cookie.You also need to set up cookie authentication. O middleware OpenID Connect usa cookies para manter as sessões de usuário, entre outras coisas.The OpenID Connect middleware uses cookies to maintain user sessions, among other things.

// App_Start\Startup.Auth.cs

public partial class Startup
{
    // Initialize variables ...

    // Configure the OWIN middleware
    public void ConfigureAuth(IAppBuilder app)
    {
        app.UseCookieAuthentication(new CookieAuthenticationOptions());
        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

        app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                // Generate the metadata address using the tenant and policy information
                MetadataAddress = String.Format(AadInstance, Tenant, DefaultPolicy),

                // These are standard OpenID Connect parameters, with values pulled from web.config
                ClientId = ClientId,
                RedirectUri = RedirectUri,
                PostLogoutRedirectUri = RedirectUri,

                // Specify the callbacks for each type of notifications
                Notifications = new OpenIdConnectAuthenticationNotifications
                {
                    RedirectToIdentityProvider = OnRedirectToIdentityProvider,
                    AuthorizationCodeReceived = OnAuthorizationCodeReceived,
                    AuthenticationFailed = OnAuthenticationFailed,
                },

                // Specify the claims to validate
                TokenValidationParameters = new TokenValidationParameters
                {
                    NameClaimType = "name"
                },

                // Specify the scope by appending all of the scopes requested into one string (seperated by a blank space)
                Scope = $"{OpenIdConnectScopes.OpenId} {ReadTasksScope} {WriteTasksScope}"
            }
        );
    }

    // Implement the "Notification" methods...
}

Em OpenIdConnectAuthenticationOptions acima, definimos um conjunto de funções de retorno de chamada para notificações específicas que são recebidas pelo middleware OpenID Connect.In OpenIdConnectAuthenticationOptions above, we define a set of callback functions for specific notifications that are received by the OpenID Connect middleware. Esses comportamentos são definidos usando um objeto OpenIdConnectAuthenticationNotifications e armazenados na variável Notifications.These behaviors are defined using a OpenIdConnectAuthenticationNotifications object and stored into the Notifications variable. Em nossa amostra, podemos definir três retornos de chamada diferentes dependendo do evento.In our sample, we define three different callbacks depending on the event.

Usando políticas diferentesUsing different policies

A notificação RedirectToIdentityProvider é disparada sempre que uma solicitação é feita ao Azure AD B2C.The RedirectToIdentityProvider notification is triggered whenever a request is made to Azure AD B2C. Na função de retorno de chamada OnRedirectToIdentityProvider, verificamos na chamada de saída se desejamos usar uma política diferente.In the callback function OnRedirectToIdentityProvider, we check in the outgoing call if we want to use a different policy. Para fazer uma redefinição de senha ou editar um perfil, você precisa usar a política correspondente, assim como a política de redefinição de senha, em vez da política padrão de "Inscrever-se ou Entrar".In order to do a password reset or edit a profile, you need to use the corresponding policy such as the password reset policy instead of the default "Sign-up or Sign-in" policy.

Em nossa amostra, quando um usuário deseja redefinir a senha ou editar o perfil, adicionamos a política que preferimos usar no contexto do OWIN.In our sample, when a user wants to reset the password or edit the profile, we add the policy we prefer to use into the OWIN context. Isso pode ser feito fazendo o seguinte:That can be done by doing the following:

    // Let the middleware know you are trying to use the edit profile policy
    HttpContext.GetOwinContext().Set("Policy", EditProfilePolicyId);

Você também pode implementar a função de retorno de chamada OnRedirectToIdentityProvider fazendo o seguinte:And you can implement the callback function OnRedirectToIdentityProvider by doing the following:

/*
*  On each call to Azure AD B2C, check if a policy (e.g. the profile edit or password reset policy) has been specified in the OWIN context.
*  If so, use that policy when making the call. Also, don't request a code (since it won't be needed).
*/
private Task OnRedirectToIdentityProvider(RedirectToIdentityProviderNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions> notification)
{
    var policy = notification.OwinContext.Get<string>("Policy");

    if (!string.IsNullOrEmpty(policy) && !policy.Equals(DefaultPolicy))
    {
        notification.ProtocolMessage.Scope = OpenIdConnectScopes.OpenId;
        notification.ProtocolMessage.ResponseType = OpenIdConnectResponseTypes.IdToken;
        notification.ProtocolMessage.IssuerAddress = notification.ProtocolMessage.IssuerAddress.Replace(DefaultPolicy, policy);
    }

    return Task.FromResult(0);
}

Manipulando códigos de autorizaçãoHandling authorization codes

A notificação AuthorizationCodeReceived é disparada quando um código de autorização é recebido.The AuthorizationCodeReceived notification is triggered when an authorization code is received. O middleware OpenID Connect não dá suporte à permutação de códigos por tokens de acesso.The OpenID Connect middleware does not support exchanging codes for access tokens. Você pode permutar manualmente o código pelo token em uma função de retorno de chamada.You can manually exchange the code for the token in a callback function. Para obter mais informações, examine a documentação que explica como fazê-lo.For more information, please look at the documentation that explains how.

Tratamento de errosHandling errors

A notificação AuthenticationFailed é disparada quando a autenticação falha.The AuthenticationFailed notification is triggered when authentication fails. Em seu método de retorno de chamada, você pode tratar os erros como desejar.In its callback method, you can handle the errors as you wish. No entanto, você deve adicionar uma verificação para o código de erro AADB2C90118.You should however add a check for the error code AADB2C90118. Durante a execução da política "Inscrever-se ou Entrar", o usuário tem a oportunidade de selecionar o link Esqueceu sua senha?.During the execution of the "Sign-up or Sign-in" policy, the user has the opportunity to select a Forgot your password? link. Nesse caso, o Azure AD B2C envia esse código de erro para o seu aplicativo indicando que seu aplicativo faça uma solicitação usando a política de redefinição de senha em vez disso.In this event, Azure AD B2C sends your app that error code indicating that your app should make a request using the password reset policy instead.

/*
* Catch any failures received by the authentication middleware and handle appropriately
*/
private Task OnAuthenticationFailed(AuthenticationFailedNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions> notification)
{
    notification.HandleResponse();

    // Handle the error code that Azure AD B2C throws when trying to reset a password from the login page
    // because password reset is not supported by a "sign-up or sign-in policy"
    if (notification.ProtocolMessage.ErrorDescription != null && notification.ProtocolMessage.ErrorDescription.Contains("AADB2C90118"))
    {
        // If the user clicked the reset password link, redirect to the reset password route
        notification.Response.Redirect("/Account/ResetPassword");
    }
    else if (notification.Exception.Message == "access_denied")
    {
        notification.Response.Redirect("/");
    }
    else
    {
        notification.Response.Redirect("/Home/Error?message=" + notification.Exception.Message);
    }

    return Task.FromResult(0);
}

Enviar solicitações de autenticação ao AD do AzureSend authentication requests to Azure AD

Seu aplicativo agora está configurado corretamente para se comunicar com o AD B2C do Azure usando o protocolo de autenticação OpenID Connect.Your app is now properly configured to communicate with Azure AD B2C by using the OpenID Connect authentication protocol. O OWIN gerencia todos os detalhes da criação de mensagens de autenticação, validação de tokens do Azure AD B2C e manutenção da sessão do usuário.OWIN manages the details of crafting authentication messages, validating tokens from Azure AD B2C, and maintaining user session. Tudo o que resta é iniciar o fluxo de cada usuário.All that remains is to initiate each user's flow.

Quando um usuário escolhe Inscrever-se/Entrar, Editar perfil ou Redefinir senha no aplicativo Web, a ação associada é invocada em Controllers\AccountController.cs:When a user selects Sign up/Sign in, Edit profile, or Reset password in the web app, the associated action is invoked in Controllers\AccountController.cs:

// Controllers\AccountController.cs

/*
*  Called when requesting to sign up or sign in
*/
public void SignUpSignIn()
{
    // Use the default policy to process the sign up / sign in flow
    if (!Request.IsAuthenticated)
    {
        HttpContext.GetOwinContext().Authentication.Challenge();
        return;
    }

    Response.Redirect("/");
}

/*
*  Called when requesting to edit a profile
*/
public void EditProfile()
{
    if (Request.IsAuthenticated)
    {
        // Let the middleware know you are trying to use the edit profile policy (see OnRedirectToIdentityProvider in Startup.Auth.cs)
        HttpContext.GetOwinContext().Set("Policy", Startup.EditProfilePolicyId);

        // Set the page to redirect to after editing the profile
        var authenticationProperties = new AuthenticationProperties { RedirectUri = "/" };
        HttpContext.GetOwinContext().Authentication.Challenge(authenticationProperties);

        return;
    }

    Response.Redirect("/");

}

/*
*  Called when requesting to reset a password
*/
public void ResetPassword()
{
    // Let the middleware know you are trying to use the reset password policy (see OnRedirectToIdentityProvider in Startup.Auth.cs)
    HttpContext.GetOwinContext().Set("Policy", Startup.ResetPasswordPolicyId);

    // Set the page to redirect to after changing passwords
    var authenticationProperties = new AuthenticationProperties { RedirectUri = "/" };
    HttpContext.GetOwinContext().Authentication.Challenge(authenticationProperties);

    return;
}

Você também pode usar OWIN para desconectar o usuário do aplicativo.You can also use OWIN to sign out the user from the app. Em Controllers\AccountController.cs, temos:In Controllers\AccountController.cs we have:

// Controllers\AccountController.cs

/*
*  Called when requesting to sign out
*/
public void SignOut()
{
    // To sign out the user, you should issue an OpenIDConnect sign out request.
    if (Request.IsAuthenticated)
    {
        IEnumerable<AuthenticationDescription> authTypes = HttpContext.GetOwinContext().Authentication.GetAuthenticationTypes();
        HttpContext.GetOwinContext().Authentication.SignOut(authTypes.Select(t => t.AuthenticationType).ToArray());
        Request.GetOwinContext().Authentication.GetAuthenticationTypes();
    }
}

Além de chamar explicitamente uma política, você pode usar uma marca [Authorize] em seus controladores que executa uma política se o usuário não estiver conectado.In addition to explicitly invoking a policy, you can use a [Authorize] tag in your controllers that executes a policy if the user is not signed in. Abra Controllers\HomeController.cs e adicione a marca [Authorize] ao controlador de declarações.Open Controllers\HomeController.cs and add the [Authorize] tag to the claims controller. O OWIN seleciona a última política configurada quando a marca [Authorize] for atingida.OWIN selects the last policy configured when the [Authorize] tag is hit.

// Controllers\HomeController.cs

// You can use the Authorize decorator to execute a certain policy if the user is not already signed into the app.
[Authorize]
public ActionResult Claims()
{
  ...

Exibir informações do usuárioDisplay user information

Ao autenticar usuários com o OpenID Connect, o Azure AD B2C retorna um token de ID para o aplicativo que contém declarações.When you authenticate users by using OpenID Connect, Azure AD B2C returns an ID token to the app that contains claims. Esses são declarações sobre o usuário.These are assertions about the user. Você pode usar as declarações para personalizar o aplicativo.You can use claims to personalize your app.

Abra o arquivo Controllers\HomeController.cs .Open the Controllers\HomeController.cs file. Você pode acessar as declarações do usuário em seus controladores por meio do objeto principal de segurança ClaimsPrincipal.Current .You can access user claims in your controllers via the ClaimsPrincipal.Current security principal object.

// Controllers\HomeController.cs

[Authorize]
public ActionResult Claims()
{
    Claim displayName = ClaimsPrincipal.Current.FindFirst(ClaimsPrincipal.Current.Identities.First().NameClaimType);
    ViewBag.DisplayName = displayName != null ? displayName.Value : string.Empty;
    return View();
}

Você pode acessar qualquer declaração de que seu aplicativo recebe da mesma maneira.You can access any claim that your application receives in the same way. Confira na página Declarações uma lista de todas as declarações recebidas pelo aplicativo.A list of all the claims the app receives is available for you on the Claims page.