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:
- Um locatário do Azure AD B2C
- Uma aplicação registada no seu inquilino
- Fluxos de usuários criados em seu locatário
- Uma API publicada no Gerenciamento de API do Azure
- (Opcional) Uma plataforma Postman para testar o acesso seguro
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.
- Inicie sessão no portal do Azure.
- 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 .
- 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.
- Selecione Registos de aplicações e, em seguida, selecione o separador Aplicações próprias.
- 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.
No portal do Azure, vá para seu locatário do Azure AD B2C.
Em Políticas, selecione Fluxos de usuário.
Selecione uma política existente (por exemplo, B2C_1_signupsignin1) e, em seguida, selecione Executar fluxo de usuário.
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.
Selecione o hiperlink para ir para a página de configuração conhecida do OpenID Connect.
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.
No portal do Azure, vá para sua instância de Gerenciamento de API do Azure.
Selecione APIs.
Selecione a API que você deseja proteger com o Azure AD B2C.
Selecione o separador Design.
Em Processamento de entrada, selecione </> para abrir o editor de código de política.
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.
No portal do Azure, vá para seu locatário do Azure AD B2C.
Em Políticas, selecione Fluxos de usuário.
Selecione um fluxo de usuário de inscrição/entrada existente (por exemplo, B2C_1_signupsignin1).
Em Aplicativo, selecione webapp1.
Em URL de resposta, selecione
https://jwt.ms
.Selecione Executar fluxo de utilizador.
Conclua o processo de início de sessão. Você deve ser redirecionado para
https://jwt.ms
.Registre o valor do token codificado exibido em seu navegador. Você usa esse valor de token para o cabeçalho Authorization no Postman.
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:
- No portal do Azure, vá para sua instância de serviço de Gerenciamento de API do Azure.
- Selecione Subscrições.
- Selecione as reticências (...) junto a Produto: Ilimitado e, em seguida, selecione Mostrar/ocultar chaves.
- 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.
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.
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
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:
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.
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:
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:
- Adicione suporte à sua política de entrada do Gerenciamento de API do Azure para tokens emitidos pelo b2clogin.com e pelo login.microsoftonline.com.
- Atualize seus aplicativos um de cada vez para obter tokens do ponto de extremidade b2clogin.com.
- 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.