Proteger uma API de Gerenciamento de API do Azure com o Azure AD B2C

Saiba como restringir o acesso à sua API de Gerenciamento de API do Azure a clientes autenticados com o Azure Ative Directory B2C (Azure AD B2C). Siga as instruções neste artigo para criar e testar uma política de entrada no Gerenciamento de API do Azure que restringe o acesso apenas às solicitações que incluem um token de acesso emitido pelo Azure AD B2C válido.

Pré-requisitos

Antes de começar, certifique-se de que dispõe dos seguintes recursos:

Obter a ID do aplicativo Azure AD B2C

Ao proteger uma API no Gerenciamento de API do Azure com o Azure AD B2C, você precisa de vários valores para a política de entrada criada no Gerenciamento de API do Azure. Primeiro, registre a ID do aplicativo de um aplicativo que você criou anteriormente em seu locatário do Azure AD B2C. Se você estiver usando o aplicativo criado para satisfazer os pré-requisitos, use a ID do aplicativo para webapp1.

Para registrar um aplicativo em seu locatário do Azure AD B2C, você pode usar nossa nova experiência unificada de registros de aplicativos ou nossa experiência de aplicativos herdados. Saiba mais sobre a nova experiência de inscrições.

  1. Inicie sessão no portal do Azure.
  2. Se você tiver acesso a vários locatários, selecione o ícone Configurações no menu superior para alternar para seu locatário do Azure AD B2C no menu Diretórios + assinaturas .
  3. No painel esquerdo, selecione Azure AD B2C. Como alternativa, você pode selecionar Todos os serviços e, em seguida, pesquisar e selecionar Azure AD B2C.
  4. Selecione Registos de aplicações e, em seguida, selecione o separador Aplicações próprias.
  5. Registre o valor na coluna ID do aplicativo (cliente) para webapp1 ou para outro aplicativo que você criou anteriormente.

Obter um ponto de extremidade do emissor de token

Em seguida, obtenha a URL de configuração conhecida para um dos seus fluxos de usuário do Azure AD B2C. Você também precisa do URI de ponto de extremidade do emissor de token que deseja dar suporte no Gerenciamento de API do Azure.

  1. No portal do Azure, vá para seu locatário do Azure AD B2C.

  2. Em Políticas, selecione Fluxos de usuário.

  3. Selecione uma política existente (por exemplo, B2C_1_signupsignin1) e, em seguida, selecione Executar fluxo de usuário.

  4. Registre a URL no hiperlink exibido sob o título Executar fluxo de usuário na parte superior da página. Essa URL é o ponto de extremidade de descoberta conhecido do OpenID Connect para o fluxo de usuários e você a usará na próxima seção quando configurar a política de entrada no Gerenciamento de API do Azure.

    Screenshot of the well-known URI hyperlink on the

  5. Selecione o hiperlink para ir para a página de configuração conhecida do OpenID Connect.

  6. Na página que se abre no navegador, registre o issuer valor. Por exemplo:

    https://<tenant-name>.b2clogin.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/

    Você usará esse valor na próxima seção, quando configurar sua API no Gerenciamento de API do Azure.

Agora você deve ter duas URLs gravadas para uso na próxima seção: a URL do ponto de extremidade de configuração conhecida do OpenID Connect e o URI do emissor. Por exemplo:

https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/B2C_1_signupsignin1/v2.0/.well-known/openid-configuration
https://<tenant-name>.b2clogin.com/99999999-0000-0000-0000-999999999999/v2.0/

Configurar a política de entrada no Gerenciamento de API do Azure

Agora você está pronto para adicionar a política de entrada no Gerenciamento de API do Azure que valida chamadas de API. Ao adicionar uma política de validação de token da Web JSON (JWT) que verifica o público e o emissor em um token de acesso, você pode garantir que apenas chamadas de API com um token válido sejam aceitas.

  1. No portal do Azure, vá para sua instância de Gerenciamento de API do Azure.

  2. Selecione APIs.

  3. Selecione a API que você deseja proteger com o Azure AD B2C.

  4. Selecione o separador Design.

  5. Em Processamento de entrada, selecione </> para abrir o editor de código de política.

  6. Coloque a seguinte tag dentro da política e faça o <inbound> seguinte<validate-jwt>:

    a. Atualize o url valor no elemento com a <openid-config> URL de configuração conhecida da sua política.
    b. Atualize o <audience> elemento com a ID do aplicativo que você criou anteriormente em seu locatário B2C (por exemplo, webapp1).
    c. Atualize o elemento com o <issuer> ponto de extremidade do emissor de token que você registrou anteriormente.

    <policies>
        <inbound>
            <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
                <openid-config url="https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/B2C_1_signupsignin1/v2.0/.well-known/openid-configuration" />
                <audiences>
                    <audience>44444444-0000-0000-0000-444444444444</audience>
                </audiences>
                <issuers>
                    <issuer>https://<tenant-name>.b2clogin.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
                </issuers>
            </validate-jwt>
            <base />
        </inbound>
        <backend> <base /> </backend>
        <outbound> <base /> </outbound>
        <on-error> <base /> </on-error>
    </policies>
    

Validar o acesso seguro à API

Para garantir que apenas chamadores autenticados possam acessar sua API, você pode validar sua configuração de Gerenciamento de API do Azure chamando a API com o Postman.

Para chamar a API, você precisa de um token de acesso emitido pelo Azure AD B2C e uma chave de assinatura do Gerenciamento de API do Azure.

Obter um token de acesso

Primeiro, você precisa de um token emitido pelo Azure AD B2C para usar no cabeçalho no Authorization Postman. Você pode obter um usando o recurso Executar agora do fluxo de usuário de inscrição/entrada que você criou como um dos pré-requisitos.

  1. No portal do Azure, vá para seu locatário do Azure AD B2C.

  2. Em Políticas, selecione Fluxos de usuário.

  3. Selecione um fluxo de usuário de inscrição/entrada existente (por exemplo, B2C_1_signupsignin1).

  4. Em Aplicativo, selecione webapp1.

  5. Em URL de resposta, selecione https://jwt.ms.

  6. Selecione Executar fluxo de utilizador.

    Screenshot of the

  7. Conclua o processo de início de sessão. Você deve ser redirecionado para https://jwt.ms.

  8. Registre o valor do token codificado exibido em seu navegador. Você usa esse valor de token para o cabeçalho Authorization no Postman.

    Screenshot of the encoded token value displayed on jwt.ms.

Obter uma chave de assinatura da API

Um aplicativo cliente (neste caso, Postman) que chama uma API publicada deve incluir uma chave de assinatura válida do Gerenciamento de API em suas solicitações HTTP para a API. Para obter uma chave de subscrição para incluir no seu pedido HTTP do Postman:

  1. No portal do Azure, vá para sua instância de serviço de Gerenciamento de API do Azure.
  2. Selecione Subscrições.
  3. Selecione as reticências (...) junto a Produto: Ilimitado e, em seguida, selecione Mostrar/ocultar chaves.
  4. Registre a chave primária do produto. Você usa essa chave para o Ocp-Apim-Subscription-Key cabeçalho em sua solicitação HTTP no Postman.

Screenshot of the

Testar uma chamada de API segura

Com o token de acesso e a chave de assinatura do Gerenciamento de API do Azure registrados, você está pronto para testar se configurou corretamente o acesso seguro à API.

  1. Crie um novo GET pedido no Postman. Para a URL da solicitação, especifique o ponto de extremidade da lista de alto-falantes da API que você publicou como um dos pré-requisitos. Por exemplo:

    https://contosoapim.azure-api.net/conference/speakers

  2. Em seguida, adicione os seguintes cabeçalhos:

    Key valor
    Authorization O valor do token codificado que você registrou anteriormente, prefixado com Bearer (inclua o espaço após "Portador")
    Ocp-Apim-Subscription-Key A chave de assinatura do Gerenciamento de API do Azure que você registrou anteriormente.

    O URL e os cabeçalhos da solicitação GET devem ser semelhantes aos mostrados na imagem a seguir:

    Screenshot of the Postman UI showing the GET request URL and headers.

  3. Em Postman, selecione o botão Enviar para executar a solicitação. Se você configurou tudo corretamente, você deve receber uma resposta JSON com uma coleção de palestrantes da conferência (mostrados aqui, truncados):

    {
      "collection": {
        "version": "1.0",
        "href": "https://conferenceapi.azurewebsites.net:443/speakers",
        "links": [],
        "items": [
          {
            "href": "https://conferenceapi.azurewebsites.net/speaker/1",
            "data": [
              {
                "name": "Name",
                "value": "Scott Guthrie"
              }
            ],
            "links": [
              {
                "rel": "http://tavis.net/rels/sessions",
                "href": "https://conferenceapi.azurewebsites.net/speaker/1/sessions"
              }
            ]
          },
    [...]
    

Testar uma chamada de API insegura

Agora que você fez uma solicitação bem-sucedida, teste o caso de falha para garantir que as chamadas para sua API com um token inválido sejam rejeitadas conforme o esperado. Uma maneira de executar o teste é adicionar ou alterar alguns caracteres no valor do token e, em seguida, executar a mesma GET solicitação que antes.

  1. Adicione vários caracteres ao valor do token para simular um token inválido. Por exemplo, você pode adicionar "INVALID" ao valor do token, conforme mostrado aqui:

    Screenshot of the Headers section of Postman UI showing the string INVALID added to token.

  2. Selecione o botão Enviar para executar a solicitação. Com um token inválido, o resultado esperado é um código de 401 status não autorizado:

    {
        "statusCode": 401,
        "message": "Unauthorized. Access token is missing or invalid."
    }
    

Se vir um código de estado, verificou que apenas os chamadores com um 401 token de acesso válido emitido pelo Azure AD B2C podem fazer pedidos bem-sucedidos à sua API de Gestão de API do Azure.

Suporte a vários aplicativos e emissores

Vários aplicativos normalmente interagem com uma única API REST. Para permitir que sua API aceite tokens destinados a vários aplicativos, adicione suas IDs de aplicativo ao <audiences> elemento na política de entrada do Gerenciamento de API do Azure.

<!-- Accept tokens intended for these recipient applications -->
<audiences>
    <audience>44444444-0000-0000-0000-444444444444</audience>
    <audience>66666666-0000-0000-0000-666666666666</audience>
</audiences>

Da mesma forma, para dar suporte a vários emissores de token, adicione seus URIs de ponto de extremidade ao elemento na política de entrada do Gerenciamento de <issuers> API do Azure.

<!-- Accept tokens from multiple issuers -->
<issuers>
    <issuer>https://<tenant-name>.b2clogin.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
    <issuer>https://login.microsoftonline.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
</issuers>

Migrar para o b2clogin.com

Se você tiver uma API ManagementM da API do Azure que valide tokens emitidos pelo ponto de extremidade herdado login.microsoftonline.com , deverá migrar a API e os aplicativos que a chamam para usar tokens emitidos por b2clogin.com.

Você pode seguir este processo geral para executar uma migração em estágios:

  1. Adicione suporte à sua política de entrada do Gerenciamento de API do Azure para tokens emitidos pelo b2clogin.com e pelo login.microsoftonline.com.
  2. Atualize seus aplicativos um de cada vez para obter tokens do ponto de extremidade b2clogin.com.
  3. Depois que todos os seus aplicativos estiverem obtendo tokens corretamente do b2clogin.com, remova o suporte para tokens emitidos .com login.microsoftonline da API.

O exemplo a seguir da política de entrada do Gerenciamento de API do Azure ilustra como aceitar tokens emitidos por b2clogin.com e login.microsoftonline.com. Além disso, a política suporta solicitações de API de dois aplicativos.

<policies>
    <inbound>
        <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
            <openid-config url="https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/B2C_1_signupsignin1/v2.0/.well-known/openid-configuration" />
            <audiences>
                <audience>44444444-0000-0000-0000-444444444444</audience>
                <audience>66666666-0000-0000-0000-666666666666</audience>
            </audiences>
            <issuers>
                <issuer>https://login.microsoftonline.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
                <issuer>https://<tenant-name>.b2clogin.com/99999999-0000-0000-0000-999999999999/v2.0/</issuer>
            </issuers>
        </validate-jwt>
        <base />
    </inbound>
    <backend> <base /> </backend>
    <outbound> <base /> </outbound>
    <on-error> <base /> </on-error>
</policies>

Próximos passos

Para obter informações adicionais sobre as políticas de Gerenciamento de API do Azure, consulte o índice de referência da política de Gerenciamento de API do Azure.

Para obter informações sobre como migrar APIs da Web baseadas em OWIN e seus aplicativos para b2clogin.com, consulte Migrar uma API da Web baseada em OWIN para b2clogin.com.