Partilhar via


Solucionar problemas da API do provedor de declarações personalizado

Eventos de autenticação e provedores de declarações personalizados permitem que você personalize a experiência de autenticação do Microsoft Entra integrando-se com sistemas externos. Por exemplo, você pode criar uma API de provedor de declarações personalizada e configurar um aplicativo OpenID Connect ou um aplicativo SAML para receber tokens com declarações de um repositório externo.

Comportamento de erro

Quando uma chamada de API falha, o comportamento de erro é o seguinte:

  • Para aplicativos OpenId Connect - Microsoft Entra ID redireciona o usuário de volta para o aplicativo cliente com um erro. Um token não é cunhado.
  • Para aplicativos SAML - Microsoft Entra ID mostra ao usuário uma tela de erro na experiência de autenticação. O usuário não é redirecionado de volta para o aplicativo cliente.

O código de erro enviado de volta para o aplicativo ou o usuário é genérico. Para solucionar problemas, verifique os logs de entrada para os códigos de erro.

Registo

Para solucionar problemas com o ponto de extremidade da API REST do provedor de declarações personalizadas, a API REST deve lidar com o registro em log. O Azure Functions e outras plataformas de desenvolvimento de API fornecem soluções de registo detalhadas. Use essas soluções para obter informações detalhadas sobre o comportamento de suas APIs e solucionar problemas de sua lógica de API.

Registos de início de sessão do Microsoft Entra

Gorjeta

As etapas neste artigo podem variar ligeiramente com base no portal a partir do qual você começou.

Você também pode usar os logs de entrada do Microsoft Entra além dos logs da API REST e das soluções de diagnóstico do ambiente de hospedagem. Usando os logs de entrada do Microsoft Entra, você pode encontrar erros, que podem afetar os logins dos usuários. Os logs de entrada do Microsoft Entra fornecem informações sobre o status HTTP, código de erro, duração de execução e número de novas tentativas que ocorreram na API foi chamada pelo ID do Microsoft Entra.

Os logs de entrada do Microsoft Entra também se integram ao Azure Monitor. Você pode configurar alertas e monitoramento, visualizar os dados e integrar com ferramentas de gerenciamento de eventos e informações de segurança (SIEM). Por exemplo, você pode configurar notificações se o número de erros exceder um determinado limite escolhido.

Para aceder aos registos de início de sessão do Microsoft Entra:

  1. Entre no centro de administração do Microsoft Entra como pelo menos um administrador de aplicativos na nuvem.

  2. Navegue até Aplicativos de identidade>>Aplicativos corporativos.

  3. Selecione Registos de início de sessão e, em seguida, selecione o registo de início de sessão mais recente.

  4. Para obter mais detalhes, selecione a guia Eventos de autenticação. Informações relacionadas à chamada à API REST da extensão de autenticação personalizada são exibidas, incluindo quaisquer códigos de erro.

    Captura de tela que mostra as informações dos eventos de autenticação.

Referência de códigos de erro

Use a tabela a seguir para diagnosticar um código de erro.

Código de erro Nome do erro Description
1003000 EventHandlerUnexpectedError Houve um erro inesperado ao processar um manipulador de eventos.
1003001 CustomExtenstionUnexpectedError Houve um erro inesperado ao chamar uma API de extensão personalizada.
1003002 CustomExtensionInvalidHTTPStatus A API de extensão personalizada retornou um código de status HTTP inválido. Verifique se a API retorna um código de status aceito definido para esse tipo de extensão personalizada.
1003003 CustomExtensionInvalidResponseBody Houve um problema ao analisar o corpo de resposta da extensão personalizada. Verifique se o corpo de resposta da API está em um esquema aceitável para esse tipo de extensão personalizada.
1003004 CustomExtensionThrottlingError Há muitas solicitações de extensão personalizadas. Essa exceção é lançada para chamadas de API de extensão personalizadas quando os limites de limitação são atingidos.
1003005 CustomExtensionTimedOut A extensão personalizada não respondeu dentro do tempo limite permitido. Verifique se sua API está respondendo dentro do tempo limite configurado para a extensão personalizada. Também pode indicar que o token de acesso é inválido. Siga as etapas para chamar sua API REST diretamente.
1003006 CustomExtensionInvalidResponseContentType O tipo de conteúdo de resposta da extensão personalizada não é 'application/json'.
1003007 CustomExtensionNullClaimsResponse A API de extensão personalizada respondeu com um saco de declarações nulas.
1003008 CustomExtensionInvalidResponseApiSchemaVersion A API de extensão personalizada não respondeu com a mesma apiSchemaVersion para a qual foi chamada.
1003009 CustomExtensionEmptyResponse O corpo de resposta da API de extensão personalizada era nulo quando isso não era esperado.
1003010 CustomExtensionInvalidNumberOfActions A resposta da API de extensão personalizada incluiu um número diferente de ações do que as suportadas para esse tipo de extensão personalizada.
1003011 CustomExtensionNotFound A extensão personalizada associada a um ouvinte de eventos não pôde ser encontrada.
1003012 CustomExtensionInvalidActionType A extensão personalizada retornou um tipo de ação inválido definido para esse tipo de extensão personalizada.
1003014 CustomExtensionIncorrectResourceIdFormat A propriedade identifierUris no manifesto para o registro do aplicativo para a extensão personalizada deve estar no formato "api://{fully qualified domain name}/{appid}.
1003015 CustomExtensionDomainNameDoesNotMatch O targetUrl e resourceId da extensão personalizada devem ter o mesmo nome de domínio totalmente qualificado.
1003016 CustomExtensionResourceServicePrincipalNotFound O appId da extensão personalizada resourceId deve corresponder a uma entidade de serviço real no locatário.
1003017 CustomExtensionClientServicePrincipalNotFound A entidade de serviço de recurso de extensão personalizada não é encontrada no locatário.
1003018 CustomExtensionClientServiceDisabled A entidade de serviço de recurso de extensão personalizada está desabilitada neste locatário.
1003019 CustomExtensionResourceServicePrincipalDisabled A entidade de serviço de recurso de extensão personalizada está desabilitada neste locatário.
1003020 CustomExtensionIncorrectTargetUrlFormat O URL de destino está em um formato impróprio. Deve ser um URL válido que comece com https.
1003021 CustomExtensionPermissionNotGrantedToServicePrincipal A entidade de serviço não tem consentimento de administrador para a função de aplicativo Microsoft Graph CustomAuthenticationExtensions.Receive.Payload (também conhecida como permissão de aplicativo), que é necessária para que o aplicativo receba solicitações HTTP de extensão de autenticação personalizada.
1003022 CustomExtensionMsGraphServicePrincipalDisabledOrNotFound A entidade de serviço do MS Graph está desativada ou não foi encontrada neste locatário.
1003023 CustomExtensionBlocked O ponto de extremidade usado para a extensão personalizada é bloqueado pelo serviço.
1003024 CustomExtensionResponseSizeExceeded O tamanho da resposta da extensão personalizada excedeu o limite máximo.
1003025 CustomExtensionResponseClaimsSizeExceeded O tamanho total das declarações na resposta de extensão personalizada excedeu o limite máximo.
1003026 CustomExtensionNullOrEmptyClaimKeyNotSupported A API de extensão personalizada respondeu com declarações contendo chave nula ou vazia'
1003027 CustomExtensionConnectionError Erro ao se conectar à API de extensão personalizada.

Ligue diretamente para sua API REST

Sua API REST é protegida por um token de acesso do Microsoft Entra. Você pode testar sua API por;

  • Obtendo um token de acesso com um registro de aplicativo associado às extensões de autenticação personalizadas
  • Teste sua API localmente usando uma ferramenta de teste de API.
  1. Para fins de desenvolvimento local e testes, abra local.settings.json e substitua o código pelo seguinte JSON:

    {
      "IsEncrypted": false,
      "Values": {
        "AzureWebJobsStorage": "",
        "AzureWebJobsSecretStorageType": "files",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet",
        "AuthenticationEvents__BypassTokenValidation" : false
      }
    }
    

    Nota

    Se você usou o pacote NuGet Microsoft.Azure.WebJobs.Extensions.AuthenticationEvents, certifique-se de definir "AuthenticationEvents__BypassTokenValidation" : true para fins de teste local.

  2. Usando sua ferramenta de teste de API preferida, crie uma nova solicitação HTTP e defina o método HTTP como POST.

  3. Use o seguinte corpo JSON que imita a solicitação que o ID do Microsoft Entra envia para sua API REST.

    {
        "type": "microsoft.graph.authenticationEvent.tokenIssuanceStart",
        "source": "/tenants/aaaabbbb-0000-cccc-1111-dddd2222eeee/applications/00001111-aaaa-2222-bbbb-3333cccc4444",
        "data": {
            "@odata.type": "microsoft.graph.onTokenIssuanceStartCalloutData",
            "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
            "authenticationEventListenerId": "11112222-bbbb-3333-cccc-4444dddd5555",
            "customAuthenticationExtensionId": "22223333-cccc-4444-dddd-5555eeee6666",
            "authenticationContext": {
                "correlationId": "aaaa0000-bb11-2222-33cc-444444dddddd",
                "client": {
                    "ip": "127.0.0.1",
                    "locale": "en-us",
                    "market": "en-us"
                },
                "protocol": "OAUTH2.0",
                "clientServicePrincipal": {
                    "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
                    "appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
                    "appDisplayName": "My Test application",
                    "displayName": "My Test application"
                },
                "resourceServicePrincipal": {
                    "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
                    "appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
                    "appDisplayName": "My Test application",
                    "displayName": "My Test application"
                },
                "user": {
                    "companyName": "Casey Jensen",
                    "createdDateTime": "2023-08-16T00:00:00Z",
                    "displayName": "Casey Jensen",
                    "givenName": "Casey",
                    "id": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
                    "mail": "casey@contoso.com",
                    "onPremisesSamAccountName": "Casey Jensen",
                    "onPremisesSecurityIdentifier": "<Enter Security Identifier>",
                    "onPremisesUserPrincipalName": "Casey Jensen",
                    "preferredLanguage": "en-us",
                    "surname": "Jensen",
                    "userPrincipalName": "casey@contoso.com",
                    "userType": "Member"
                }
            }
        }
    }
    

    Gorjeta

    Se estiver a utilizar um token de acesso obtido a partir do Microsoft Entra ID, selecione Autorização e, em seguida, selecione Token de portador e, em seguida, cole o token de acesso que recebeu do Microsoft Entra ID.

  4. Selecione Enviar e você deve receber uma resposta JSON semelhante à seguinte:

    {
        "data": {
            "@odata.type": "microsoft.graph.onTokenIssuanceStartResponseData",
            "actions": [
                {
                    "@odata.type": "microsoft.graph.tokenIssuanceStart.provideClaimsForToken",
                    "claims": {
                        "customClaim1": "customClaimValue1",
                        "customClaim2": [
                            "customClaimString1",
                            "customClaimString2" 
                        ]
                    }
                }
    
            ]
        }
    }
    

Melhorias comuns de desempenho

Um dos problemas mais comuns é que a API do provedor de declarações personalizado não responde dentro do tempo limite de dois segundos. Se a API REST não responder em tentativas subsequentes, a autenticação falhará. Para melhorar o desempenho da sua API REST, siga as sugestões abaixo:

  1. Se sua API acessar quaisquer APIs downstream, armazene em cache o token de acesso usado para chamar essas APIs, para que um novo token não precise ser adquirido em cada execução.
  2. Os problemas de desempenho estão frequentemente relacionados com os serviços a jusante. Adicione log, que registra o tempo do processo para chamar qualquer serviço downstream.
  3. Se você usa um provedor de nuvem para hospedar sua API, use um plano de hospedagem que mantenha a API sempre "quente". Para o Azure Functions, pode ser o plano Premium ou o plano Dedicado.
  4. Execute testes de integração automatizados para suas autenticações. Você também pode usar ferramentas de teste de API para testar apenas o desempenho da API.

Consulte também