Migrar uma API Web baseada em OWIN para b2clogin.com ou um domínio personalizado

Este artigo descreve uma técnica para ativar o suporte para vários emissores de tokens em APIs Web que implementam a Interface Web Aberta para .NET (OWIN). Suportar vários pontos finais de tokens é útil quando migra as APIs B2C (Azure AD B2C) do Azure Active Directory e as respetivas aplicações de um domínio para outro. Por exemplo, de login.microsoftonline.com a b2clogin.com ou a um domínio personalizado.

Ao adicionar suporte na sua API para aceitar tokens emitidos por b2clogin.com, login.microsoftonline.com ou um domínio personalizado, pode migrar as suas aplicações Web de forma faseada antes de remover o suporte para tokens emitidos por login.microsoftonline.com da API.

As secções seguintes apresentam um exemplo de como ativar vários emissores numa API Web que utiliza os componentes de middleware do Microsoft OWIN (Katana). Embora os exemplos de código sejam específicos do middleware OWIN da Microsoft, a técnica geral deve ser aplicável a outras bibliotecas OWIN.

Pré-requisitos

Precisa dos seguintes Azure AD recursos B2C antes de continuar com os passos neste artigo:

Obter pontos finais do emissor de tokens

Primeiro, tem de obter os URIs de ponto final do emissor de tokens para cada emissor que pretende suportar na sua API. Para obter os pontos finais b2clogin.com e login.microsoftonline.com suportados pelo inquilino Azure AD B2C, utilize o seguinte procedimento no portal do Azure.

Comece por selecionar um dos fluxos de utilizador existentes:

  1. Navegue para o inquilino B2C Azure AD no portal do Azure

  2. Em Políticas, selecione Fluxos de utilizador (políticas)

  3. Selecione uma política existente, por exemplo , B2C_1_signupsignin1 e, em seguida, selecione Executar fluxo de utilizador

  4. No cabeçalho Executar fluxo de utilizador junto à parte superior da página, selecione a hiperligação para navegar para o ponto final de deteção do OpenID Connect para esse fluxo de utilizador.

    Hiperligação de URI bem conhecida na página Executar agora do portal do Azure

  5. Na página que é aberta no browser, registe o issuer valor, por exemplo:

    https://your-b2c-tenant.b2clogin.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/

  6. Utilize o menu pendente Selecionar domínio para selecionar o outro domínio e, em seguida, efetue novamente os dois passos anteriores e registe o respetivo issuer valor.

Deverá ter agora dois URIs registados que são semelhantes a:

https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/
https://your-b2c-tenant.b2clogin.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/

Políticas personalizadas

Se tiver políticas personalizadas em vez de fluxos de utilizador, pode utilizar um processo semelhante para obter os URIs do emissor.

  1. Navegue para o inquilino do Azure AD B2C
  2. Selecionar Estrutura de Experiência de Identidade
  3. Selecione uma das suas políticas de entidade confiadora, por exemplo, B2C_1A_signup_signin
  4. Utilize o menu pendente Selecionar domínio para selecionar um domínio, por exemplo , yourtenant.b2clogin.com
  5. Selecione a hiperligação apresentada em Ponto final de deteção do OpenID Connect
  6. Registar o issuer valor
  7. Execute os passos 4 a 6 para o outro domínio, por exemplo , login.microsoftonline.com

Obter o código de exemplo

Agora que tem ambos os URIs de ponto final de token, tem de atualizar o código para especificar que ambos os pontos finais são emissores válidos. Para percorrer um exemplo, transfira ou clone a aplicação de exemplo e, em seguida, atualize o exemplo para suportar ambos os pontos finais como emissores válidos.

Transferir o arquivo: active-directory-b2c-dotnet-webapp-and-webapi-master.zip

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

Ativar vários emissores na API Web

Nesta secção, vai atualizar o código para especificar que ambos os pontos finais do emissor de tokens são válidos.

  1. Abra a solução B2C-WebAPI-DotNet.sln no Visual Studio

  2. No projeto TaskService , abra o ficheiro TaskService\App_Start\Startup.Auth.cs no seu editor

  3. Adicione a seguinte using diretiva à parte superior do ficheiro:

    using System.Collections.Generic;

  4. Adicione a ValidIssuers propriedade à TokenValidationParameters definição e especifique ambos os URIs que registou na secção anterior:

    TokenValidationParameters tvps = new TokenValidationParameters
    {
        // Accept only those tokens where the audience of the token is equal to the client ID of this app
        ValidAudience = ClientId,
        AuthenticationType = Startup.DefaultPolicy,
        ValidIssuers = new List<string> {
            "https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/",
            "https://{your-b2c-tenant}.b2clogin.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/"//,
            //"https://your-custom-domain/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/"
        }
    };
    

TokenValidationParameters é fornecido por MSAL.NET e é consumido pelo middleware OWIN na secção seguinte do código em Startup.Auth.cs. Com vários emissores válidos especificados, o pipeline da aplicação OWIN é informado de que ambos os pontos finais de token são emissores válidos.

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
{
    // This SecurityTokenProvider fetches the Azure AD B2C metadata &  from the OpenID Connect metadata endpoint
    AccessTokenFormat = new JwtFormat(tvps, new tCachingSecurityTokenProvider(String.Format(AadInstance, ultPolicy)))
});

Como mencionado anteriormente, outras bibliotecas OWIN normalmente fornecem uma instalação semelhante para suportar vários emissores. Embora fornecer exemplos para cada biblioteca esteja fora do âmbito deste artigo, pode utilizar uma técnica semelhante para a maioria das bibliotecas.

Mudar de pontos finais na aplicação Web

Com ambos os URIs agora suportados pela sua API Web, precisa agora de atualizar a sua aplicação Web para que obtenha tokens do ponto final b2clogin.com.

Por exemplo, pode configurar a aplicação Web de exemplo para utilizar o novo ponto final ao modificar o ida:AadInstance valor no ficheiro TaskWebApp\Web.config do projeto TaskWebApp .

Altere o ida:AadInstance valor na Web.config de TaskWebApp para que faça referência em {your-b2c-tenant-name}.b2clogin.com vez de login.microsoftonline.com.

Antes:

<!-- Old value -->
<add key="ida:AadInstance" value="https://login.microsoftonline.com/tfp/{0}/{1}" />

Depois (substitua {your-b2c-tenant} pelo nome do seu inquilino B2C):

<!-- New value -->
<add key="ida:AadInstance" value="https://{your-b2c-tenant}.b2clogin.com/tfp/{0}/{1}" />

Quando as cadeias de ponto final são construídas durante a execução da aplicação Web, os pontos finais baseados em b2clogin.com são utilizados quando solicita tokens.

Ao utilizar um domínio personalizado:

<!-- Custom domain -->
<add key="ida:AadInstance" value="https://custom-domain/{0}/{1}" />

Passos seguintes

Este artigo apresentou um método de configuração de uma API Web que implementa o middleware OWIN da Microsoft (Katana) para aceitar tokens de vários pontos finais do emissor. Como pode reparar, existem várias outras cadeias de carateres nos ficheiros Web.Config dos projetos TaskService e TaskWebApp que teriam de ser alterados se quiser criar e executar estes projetos no seu próprio inquilino. É bem-vindo a modificar os projetos adequadamente se quiser vê-los em ação. No entanto, uma orientação completa para o fazer está fora do âmbito deste artigo.

Para obter mais informações sobre os diferentes tipos de tokens de segurança emitidos pelo Azure AD B2C, veja Descrição geral dos tokens no Azure Active Directory B2C.