Plataforma Microsoft Identity e a credencial de senha do proprietário do recurso OAuth 2,0Microsoft identity platform and the OAuth 2.0 resource owner password credential

A plataforma de identidade da Microsoft oferece suporte à concessão de credencial de senha (ROPC) do proprietário do recurso, que permite que um aplicativo Conecte o usuário manipulando sua senha diretamente.Microsoft identity platform supports the resource owner password credential (ROPC) grant, which allows an application to sign in the user by directly handling their password. O fluxo ROPC requer um alto grau de confiança e exposição do usuário, e você só deve usar esse fluxo quando outros, mais seguros, fluxos não podem ser usados.The ROPC flow requires a high degree of trust and user exposure and you should only use this flow when other, more secure, flows can't be used.

Importante

  • O ponto de extremidade da plataforma Microsoft Identity suporta apenas ROPC para locatários do Azure AD, não contas pessoais.The Microsoft identity platform endpoint only supports ROPC for Azure AD tenants, not personal accounts. Isso significa que você deve usar um terminal específico do locatário (https://login.microsoftonline.com/{TenantId_or_Name}) ou o terminal organizations.This means that you must use a tenant-specific endpoint (https://login.microsoftonline.com/{TenantId_or_Name}) or the organizations endpoint.
  • Contas pessoais são convidadas a um locatário Azure AD não é possível usar ROPC.Personal accounts that are invited to an Azure AD tenant can't use ROPC.
  • Contas que não têm senhas não podem entrar por meio de ROPC.Accounts that don't have passwords can't sign in through ROPC. Para este cenário, recomendamos que você use um fluxo diferente para seu aplicativo em vez disso.For this scenario, we recommend that you use a different flow for your app instead.
  • Se os usuários precisam usar a autenticação multifator (MFA) para fazer logon no aplicativo, eles serão bloqueados em vez disso.If users need to use multi-factor authentication (MFA) to log in to the application, they will be blocked instead.

Diagrama de protocoloProtocol diagram

O diagrama a seguir mostra o fluxo do ROPC.The following diagram shows the ROPC flow.

Diagrama mostrando o fluxo de credenciais de senha do proprietário do recurso

Solicitação da autorizaçãoAuthorization request

O fluxo ROPC é uma única solicitação: ele envia a identificação do cliente e as credenciais do usuário para o IDP e, em seguida, recebe tokens em retorno.The ROPC flow is a single request: it sends the client identification and user's credentials to the IDP, and then receives tokens in return. O cliente deve solicitar o endereço de e-mail (UPN) e a senha do usuário antes de fazer isso.The client must request the user's email address (UPN) and password before doing so. Imediatamente após uma solicitação bem-sucedida, o cliente deve liberar com segurança as credenciais do usuário da memória.Immediately after a successful request, the client should securely release the user's credentials from memory. Ele nunca deve salvá-los.It must never save them.

Dica

Tente executar a solicitação no Postman!Try executing this request in Postman! Tente executar esta solicitação no postmasterTry running this request in Postman

// Line breaks and spaces are for legibility only.  This is a public client, so no secret is required. 

POST {tenant}/oauth2/v2.0/token
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&scope=user.read%20openid%20profile%20offline_access
&username=MyUsername@myTenant.com
&password=SuperS3cret
&grant_type=password
ParâmetroParameter CondiçãoCondition DescriçãoDescription
tenant NecessárioRequired O locatário do diretório no qual você deseja fazer o login.The directory tenant that you want to log the user into. Pode estar no formato de nome amigável ou de GUID.This can be in GUID or friendly name format. Este parâmetro não pode ser definido como common ou consumers, mas pode ser definido como organizations.This parameter can't be set to common or consumers, but may be set to organizations.
client_id NecessárioRequired A ID do aplicativo (cliente) que a página de portal do Azure registros de aplicativo atribuída ao seu aplicativo.The Application (client) ID that the Azure portal - App registrations page assigned to your app.
grant_type NecessárioRequired Deve ser definido como password.Must be set to password.
username NecessárioRequired Endereço de email do usuário.The user's email address.
password NecessárioRequired A senha do usuário.The user's password.
scope RecomendadoRecommended Uma lista separada por espaço de escopos ou permissões que o aplicativo exige.A space-separated list of scopes, or permissions, that the app requires. Em um fluxo interativo, o administrador ou o usuário deve consentir esses escopos antes do tempo.In an interactive flow, the admin or the user must consent to these scopes ahead of time.
client_secret Às vezes é necessárioSometimes required Se seu aplicativo for um cliente público, o ou client_secret client_assertion o não poderá ser incluído.If your app is a public client, then the client_secret or client_assertion cannot be included. Se o aplicativo for um cliente confidencial, ele deverá ser incluído.If the app is a confidential client, then it must be included.
client_assertion Às vezes é necessárioSometimes required Uma forma diferente de client_secret, gerada usando um certificado.A different form of client_secret, generated using a certificate. Consulte credenciais de certificado para obter mais detalhes.See certificate credentials for more details.

Resposta de autenticação bem sucedidaSuccessful authentication response

O exemplo a seguir mostra uma resposta de token bem-sucedida:The following example shows a successful token response:

{
    "token_type": "Bearer",
    "scope": "User.Read profile openid email",
    "expires_in": 3599,
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
    "refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
    "id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctOD..."
}
ParâmetroParameter FormatarFormat DescriçãoDescription
token_type CadeiaString Sempre defina como Bearer.Always set to Bearer.
scope Cadeia de caracteres separadas por espaçoSpace separated strings Se um token de acesso foi retornado, esse parâmetro lista os escopos para os quais o token de acesso é válido.If an access token was returned, this parameter lists the scopes the access token is valid for.
expires_in intint Número de segundos para o qual o token de acesso incluído é válido.Number of seconds that the included access token is valid for.
access_token Cadeia de caracteres opacaOpaque string Emitido para os escopos que foram solicitados.Issued for the scopes that were requested.
id_token JWTJWT Emitido quando o parâmetro original scope inclui o escopo openid.Issued if the original scope parameter included the openid scope.
refresh_token Cadeia de caracteres opacaOpaque string Emitido quando o parâmetro original scope inclui offline_access.Issued if the original scope parameter included offline_access.

Você pode usar o token de atualização para adquirir novos tokens de acesso e atualizar os tokens usando o mesmo fluxo descrito na documentação do fluxo de código do OAuth.You can use the refresh token to acquire new access tokens and refresh tokens using the same flow described in the OAuth Code flow documentation.

Resposta de erroError response

Se o usuário não tiver fornecido o nome de usuário ou a senha corretos, ou se o cliente não tiver recebido o consentimento solicitado, a autenticação falhará.If the user hasn't provided the correct username or password, or the client hasn't received the requested consent, authentication will fail.

ErroError DescriçãoDescription Ação do clienteClient action
invalid_grant A autenticação falhouThe authentication failed As credenciais estavam incorretas ou o cliente não tem consentimento para os escopos solicitados.The credentials were incorrect or the client doesn't have consent for the requested scopes. Se os escopos não forem concedidos, um consent_required erro será retornado.If the scopes aren't granted, a consent_required error will be returned. Se isso ocorrer, o cliente deve enviar o usuário para um prompt interativo usando uma visualização da Web ou um navegador.If this occurs, the client should send the user to an interactive prompt using a webview or browser.
invalid_request A solicitação foi mal construídaThe request was improperly constructed Não há suporte para o tipo Grant /common nos /consumers contextos de autenticação ou.The grant type isn't supported on the /common or /consumers authentication contexts. Use /organizations ou uma ID de locatário em vez disso.Use /organizations or a tenant ID instead.

Saiba maisLearn more