Partilhar via


Utilize o fluxo de concessão implícita do OAuth 2.0 no portal

Nota

A partir de 12 de outubro de 2022, os portais do Power Apps passam a ser Power Pages. Mais informações: O Microsoft Power Pages está agora em disponibilidade geral (blogue)
Em breve, vamos migrar e unir a documentação dos portais do Power Apps com a documentação do Power Pages.

Esta caraterística permite que um cliente faça chamadas do lado do cliente para APIs externas e protegê-las utilizando o fluxo de concessão implícita do OAuth. Fornece uma ponto final para obter tokens de acesso seguro. Estes tokens irão conter informações de identidade do utilizador a serem utilizadas por APIs externas para autorização de acordo com o fluxo de concessão implícito do OAuth 2.0. As informações de identidade de um utilizador com sessão iniciada são transmitidas de forma segura para chamadas AJAX externas, o que ajuda os programadores a transmitir contexto de autenticação e também ajudará os utilizadores a proteger as suas APIs.

O fluxo de concessão implícita do OAuth 2.0 suporta pontos finais de token que um cliente pode contactar para obter um token de ID.

Certificados personalizados

A utilização do certificado predefinido para o fluxo de concessão implícita de OAuth 2.0, está preterida. Terá de utilizar um certificado personalizado durante a utilização do ponto final de OAuth 2.0. Utilize o centro de administração do Power Platform para carregar o certificado personalizado. Depois de carregar o certificado personalizado, necessita de atualizar as definições do site, como abaixo:

  1. Aceda às definições do portal e selecione Definições do Site.

  2. Para criar uma nova definição, selecione Novo.

  3. Para editar uma definição existente, selecione a definição do site listada na grelha.

  4. Especificar valores:

    • Nome: CustomCertificates/ImplicitGrantflow
    • Site: o site associado
    • Valor: copie o thumbprint do certificado personalizado carregado a partir do ecrã Gerir certificado personalizado e cole-o aqui. O valor indicará qual o certificado que será utilizado para o fluxo de concessão implícita.
  5. Selecione Guardar e Fechar. Menu Geral para Novas Definições de Site com valores especificados.

Detalhes de ponto final de token

Também pode obter um token efetuando um pedido POST ao ponto final /token. O URL para o ponto final do token é: <portal_url>/_services/auth/token. O ponto final do token suporta os seguintes parâmetros:

Parâmetro Necessário? Descrição
client_id Não Uma cadeia que é transmitida ao fazer uma chamada para o ponto final de autorizar. Certifique-se de que o ID do cliente ID está registado no portal. Caso contrário, é apresentado um erro. O ID do cliente é adicionado nas declarações no token como parâmetro aud e appid e pode ser utilizado por clientes para validar que o token devolvido é para a sua aplicação.
O comprimento máximo é de 36 carateres. Apenas carateres alfanuméricos e hífens são suportados.
redirect_uri Não URL do portal para onde as respostas de autenticação podem ser enviadas e recebidas. Tem de ser registado para o determinado client_id utilizado na chamada e deverá ter exatamente o mesmo valor registado.
state Não Um valor incluído no pedido que também é devolvido na resposta do token. Pode ser uma cadeia de qualquer conteúdo que pretende utilizar. Normalmente, um valor exclusivo gerado aleatoriamente é utilizado para impedir ataques de falsificação de pedido entre sites.
O comprimento máximo é de 20 carateres.
nonce Não Um valor de cadeia enviado pelo cliente que está incluído no token de ID resultante como uma declaração. O cliente, em seguida, pode verificar este valor para mitigar ataques de reprodução de token. O comprimento máximo é de 20 carateres.
response_type Não Este parâmetro suporta apenas token como um valor, permitindo que a aplicação receba imediatamente um token de acesso do ponto final de autorizar sem fazer um segundo pedido ao ponto final de autorizar.

Nota

Apesar dos parâmetros client_id, redirect_uri, state e nonce serem opcionais, é recomendável que os utilize para garantir que as integrações ficam seguras.

Resposta com êxito

O ponto final do token devolve state e expires_in como cabeçalhos de resposta, e o token no corpo do formulário.

Resposta de erro

O erro no ponto final do token é devolvido como um documento JSON com os seguintes valores:

  • ID de erro: identificador exclusivo do erro.
  • Mensagem de erro: uma mensagem de erro específica que pode ajudá-lo identificar a causa de um erro de autenticação.
  • ID de correlação: um GUID que é utilizado para fins de depuração. Se ativou o registo de diagnóstico, o ID de correlação estaria presente nos registos de erro do servidor.
  • Carimbo de data/hora: data e hora em que o erro é gerado.

A mensagem de erro é apresentada no idioma predefinido do utilizador com sessão iniciada. Se o utilizador não tem sessão iniciada, é apresentada uma página de início de sessão para que o utilizador inicie sessão. Por exemplo, uma resposta de erro tem o seguinte aspeto:

{"ErrorId": "PortalSTS0001", "ErrorMessage": "Client Id provided in the request is not a valid client Id registered for this portal. Please check the parameter and try again.", "Timestamp": "4/5/2019 10:02:11 AM", "CorrelationId": "7464eb01-71ab-44bc-93a1-f221479be847" }

Autorizar detalhes de ponto final

Nota

O ponto final de autorizar foi preterido. Utilizar pedido POST de ponto final de Token para obter token de ID.]

O URL para autorizar o ponto final é: <portal_url>/_services/auth/authorize. O ponto final de autorização suporta os seguintes parâmetros:

Parâmetro Necessário? Descrição
client_id Sim Uma cadeia que é transmitida ao fazer uma chamada para o ponto final de autorizar. Certifique-se de que o ID do cliente ID está registado no portal. Caso contrário, é apresentado um erro. O ID do cliente é adicionado nas declarações no token como parâmetro aud e appid e pode ser utilizado por clientes para validar que o token devolvido é para a sua aplicação.
O comprimento máximo é de 36 carateres. Apenas carateres alfanuméricos e hífens são suportados.
redirect_uri Sim URL do portal para onde as respostas de autenticação podem ser enviadas e recebidas. Tem de ser registado para o determinado client_id utilizado na chamada e deverá ter exatamente o mesmo valor registado.
state Não Um valor incluído no pedido que também é devolvido na resposta do token. Pode ser uma cadeia de qualquer conteúdo que pretende utilizar. Normalmente, um valor exclusivo gerado aleatoriamente é utilizado para impedir ataques de falsificação de pedido entre sites.
O comprimento máximo é de 20 carateres.
nonce Não Um valor de cadeia enviado pelo cliente que está incluído no token de ID resultante como uma declaração. O cliente, em seguida, pode verificar este valor para mitigar ataques de reprodução de token. O comprimento máximo é de 20 carateres.
response_type Não Este parâmetro suporta apenas token como um valor, o que permite que a aplicação receba imediatamente um token de acesso do ponto final de autorizar sem fazer um segundo pedido ao ponto final de autorizar.

Resposta com êxito

O ponto final de autorizar devolve os seguintes valores no URL de resposta como um fragmento:

  • token: token é devolvido como um Token Web JSON (JWT) assinado digitalmente pela chave privada do portal.
  • state: se um parâmetro de estado está incluído no pedido, o mesmo valor deverá aparecer na resposta. A aplicação deve verificar se os valores de estado no pedido e resposta são idênticos.
  • expires_in: o período de tempo que o token de acesso é válido (em segundos).

Por exemplo, uma resposta com êxito tem o seguinte aspeto:

GET https://aadb2cplayground.azurewebsites.net/#token=eyJ0eXAiOiJKV1QiLCJhbGciOI1NisIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q&expires_in=3599&state=arbitrary_data_you_sent_earlier

Resposta de erro

O erro no ponto final de autorizar é devolvido como um documento JSON com os seguintes valores:

  • ID de erro: identificador exclusivo do erro.
  • Mensagem de erro: uma mensagem de erro específica que pode ajudá-lo identificar a causa de um erro de autenticação.
  • ID de correlação: um GUID que é utilizado para fins de depuração. Se ativou o registo de diagnóstico, o ID de correlação estaria presente nos registos de erro do servidor.
  • Carimbo de data/hora: data e hora em que o erro é gerado.

A mensagem de erro é apresentada no idioma predefinido do utilizador com sessão iniciada. Se o utilizador não tem sessão iniciada, é apresentada a página de início de sessão para que o utilizador inicie sessão. Por exemplo, uma resposta de erro tem o seguinte aspeto:

{"ErrorId": "PortalSTS0001", "ErrorMessage": "Client Id provided in the request is not a valid client Id registered for this portal. Please check the parameter and try again.", "Timestamp": "4/5/2019 10:02:11 AM", "CorrelationId": "7464eb01-71ab-44bc-93a1-f221479be847" }

Validar o ID do token

Não é suficiente obter um token de ID para autenticar o utilizador; tem também de validar a assinatura do token e verificar as declarações no token com base nos requisitos da sua aplicação. O ponto final do token público fornece a chave pública do portal, a qual pode ser utilizada para validar a assinatura do token fornecida através do portal. O URL para o ponto final do token público é: <portal_url>/_services/auth/publickey.

Ativar ou desativar o fluxo de concessão implícita

Por predefinição, o fluxo de concessão implícita está ativado. Se pretender desativar o fluxo de concessão implícita, defina o valor do site Connector/ImplicitGrantFlowEnabled para False.

Se esta definição de site não está disponível no seu portal, tem de criar uma nova definição de site com o valor adequado.

Configurar a validade do token

Por predefinição, o token é válido por 15 minutos. Se pretender alterar a validade do token, defina o valor da definição do site ImplicitGrantFlow/TokenExpirationTime para o valor necessário. O valor tem de ser especificado em segundos. O valor máximo pode ser 1 hora e o valor mínimo tem de ser 1 minuto. Se for especificado um valor incorreto (por exemplo, carateres alfanuméricos), o valor predefinido de 15 minutos é utilizado. Se especificar um valor superior ao valor máximo ou inferior ao valor mínimo, os valores mínimos e máximo são utilizados respetivamente, por predefinição.

Por exemplo, para definir a validade do token como 30 minutos, defina o valor da definição do site ImplicitGrantFlow/TokenExpirationTime para 1800. Para definir a validade do token como 1 hora, defina o valor da definição do site ImplicitGrantFlow/TokenExpirationTime para 3600.

Registar ID do cliente para fluxo de concessão implícita

Tem de registar o ID do cliente com o portal para o qual este fluxo tem permissão. Para registar um ID de cliente, tem de criar as seguintes definições do site:

Definição do local Value
ImplicitGrantFlow/RegisteredClientId Os valores de ID do cliente válidos que têm permissão para este portal. Os valores devem ser separados por um ponto e vírgula e podem conter carateres alfanuméricos e hífens. O comprimento máximo é de 36 carateres.
ImplicitGrantFlow/{ClientId}/RedirectUri Os URIs de redirecionamento válidos que têm permissão para um ID de cliente específico. Os valores têm de ser separados por um ponto e vírgula. O URL fornecido tem de ser de uma página Web válida do portal.

Código de exemplo

Pode utilizar o seguinte código de exemplo para começar a utilizar o OAuth 2.0 de Concessão Implícita com APIs dos portais Power Apps.

Utilizar o token OAuth do Portal com uma API Web externa

Este exemplo é um projeto baseado em ASP.NET e é utilizado para validar o token de ID emitido pelos portais Power Apps. O exemplo completo pode ser encontrado aqui: Utilizar o token de OAuth do Portal com uma API Web externa.

Exemplo de Ponto final de token

Este exemplo mostra como pode utilizar a função getAuthenticationToken para obter um token de ID utilizando o ponto final de Token nos portais Power Apps. O exemplo pode ser encontrado aqui: Exemplo de Ponto Final de Token.

Nota

Pode indicar-nos as suas preferências no que se refere ao idioma da documentação? Responda a um breve inquérito. (tenha em atenção que o inquérito está em inglês)

O inquérito irá demorar cerca de sete minutos. Não são recolhidos dados pessoais (declaração de privacidade).