Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A plataforma de identidade da Microsoft dá suporte à concessão de autorização do dispositivo, que permite que os usuários entrem em dispositivos com restrição de entrada, como uma smart TV, um dispositivo IoT ou uma impressora. Para habilitar esse fluxo, o dispositivo faz com que o usuário visite uma página da Web em um navegador em outro dispositivo para entrar. Depois que o usuário entrar, o dispositivo poderá obter tokens de acesso e atualizar tokens conforme necessário.
Este artigo descreve como programar diretamente contra o protocolo em seu aplicativo. Quando possível, recomendamos usar as MSAL (bibliotecas de autenticação da Microsoft) com suporte para adquirir tokens e chamar APIs Web seguras. Você pode consultar aplicativos de exemplo que usam MSAL para obter exemplos.
Diagrama de protocolo
Todo o fluxo de código do dispositivo é mostrado no diagrama a seguir. Cada etapa é explicada ao longo deste artigo.
Solicitação de autorização do dispositivo
O cliente deve primeiro verificar com o servidor de autenticação um dispositivo e o código do usuário usados para iniciar a autenticação. O cliente coleta essa solicitação do /devicecode
ponto de extremidade. Na solicitação, o cliente também deve incluir as permissões necessárias para adquirir do usuário.
A partir do momento em que a solicitação é enviada, o usuário tem 15 minutos para entrar. Esse é o valor padrão para expires_in
. A solicitação só deve ser feita quando o usuário indicar que está pronto para entrar.
// Line breaks are for legibility only.
POST https://login.microsoftonline.com/{tenant}/oauth2/v2.0/devicecode
Content-Type: application/x-www-form-urlencoded
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&scope=user.read%20openid%20profile
Parâmetro | Condição | Descrição |
---|---|---|
tenant |
Obrigatório | Pode ser /common , /consumers ou /organizations . Ele também pode ser o locatário do diretório do qual você deseja solicitar permissão no GUID ou no formato de nome amigável. |
client_id |
Obrigatório | A ID do aplicativo (cliente) que a experiência centro de administração do Microsoft Entra – Registros de aplicativo atribui ao seu aplicativo. |
scope |
Obrigatório | Uma lista separada por espaços de escopos para os quais você deseja o consentimento do usuário. |
Resposta de autorização do dispositivo
Uma resposta bem-sucedida é um objeto JSON que contém as informações necessárias para permitir que o usuário entre.
Parâmetro | Formato | Descrição |
---|---|---|
device_code |
fio | Uma cadeia de caracteres longa usada para verificar a sessão entre o cliente e o servidor de autorização. O cliente usa esse parâmetro para solicitar o token de acesso do servidor de autorização. |
user_code |
fio | Uma cadeia de caracteres curta mostrada ao usuário usada para identificar a sessão em um dispositivo secundário. |
verification_uri |
URI | O URI para o qual o usuário deve ir com o user_code para entrar. |
expires_in |
int | O número de segundos antes que o device_code e o user_code expirem. |
interval |
int | O número de segundos que o cliente deve aguardar entre solicitações de sondagem. |
message |
fio | Uma cadeia de caracteres legível por humanos com instruções para o usuário. Isso pode ser localizado incluindo um parâmetro de consulta na solicitação do formulário ?mkt=xx-XX , preenchendo o código de cultura de idioma apropriado. |
Observação
O verification_uri_complete
campo de resposta não está incluído ou tem suporte no momento. Mencionamos isso porque, se você ler o padrão , verá que verification_uri_complete
está listado como uma parte opcional do padrão de fluxo de código do dispositivo.
Autenticando o usuário
Depois que o cliente recebe user_code
e verification_uri
os valores são exibidos e o usuário é direcionado para entrar por meio de seu navegador móvel ou pc.
Se o usuário se autenticar com uma conta pessoal, usando /common
ou /consumers
, será solicitado que ele entre novamente para transferir o estado de autenticação para o dispositivo. Isso ocorre porque o dispositivo não consegue acessar os cookies do usuário. Eles são solicitados a consentir com as permissões solicitadas pelo cliente. No entanto, isso não se aplica a contas corporativas ou de estudante usadas para autenticação.
Enquanto o usuário está autenticando no verification_uri
, o cliente deve estar sondando o /token
ponto de extremidade para o token solicitado usando o device_code
.
POST https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded
grant_type=urn:ietf:params:oauth:grant-type:device_code&client_id=00001111-aaaa-2222-bbbb-3333cccc4444&device_code=GMMhmHCXhWEzkobqIHGG_EnNYYsAkukHspeYUk9E8...
Parâmetro | Obrigatório | Descrição |
---|---|---|
tenant |
Obrigatório | O mesmo alias de locatário ou locatário usado na solicitação inicial. |
grant_type |
Obrigatório | Precisa ser urn:ietf:params:oauth:grant-type:device_code |
client_id |
Obrigatório | Deve corresponder ao client_id usado na solicitação inicial. |
device_code |
Obrigatório | O device_code retornado na solicitação de autorização do dispositivo. |
Erros esperados
O fluxo de código do dispositivo é um protocolo de sondagem, portanto, os erros atendidos ao cliente devem ser esperados antes da conclusão da autenticação do usuário.
Erro | Descrição | Ação do cliente |
---|---|---|
authorization_pending |
O usuário ainda não concluiu a autenticação, mas não cancelou o fluxo. | Repita a solicitação após pelo menos interval segundos. |
authorization_declined |
O usuário final negou a solicitação de autorização. | Pare a sondagem e reverta para um estado não autenticado. |
bad_verification_code |
O device_code enviado para o /token ponto de extremidade não foi reconhecido. |
Verifique se o cliente está enviando o correto device_code na solicitação. |
expired_token |
O valor foi expires_in excedido e a autenticação não é mais possível com device_code . |
Pare a sondagem e reverta para um estado não autenticado. |
Resposta de autenticação bem-sucedida
Uma resposta de token bem-sucedida se parece com:
{
"token_type": "Bearer",
"scope": "User.Read profile openid email",
"expires_in": 3599,
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
"refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctOD..."
}
Parâmetro | Formato | Descrição |
---|---|---|
token_type |
fio | Sempre Bearer . |
scope |
Cadeias de caracteres separadas por espaço | Se um token de acesso foi retornado, ele lista os escopos para os quais o token de acesso é válido. |
expires_in |
int | Número de segundos para os quais o token de acesso incluído é válido. |
access_token |
Cadeia de caracteres opaca | Emitido para os escopos que foram solicitados. |
id_token |
JWT | Emitido quando o parâmetro scope original inclui o escopo openid . |
refresh_token |
Cadeia de caracteres opaca | Emitido quando o parâmetro scope original inclui offline_access . |
Você pode usar o token de atualização para adquirir novos tokens de acesso e atualizar tokens usando o mesmo fluxo documentado na documentação de fluxo do Código OAuth.
Aviso
Não tente validar ou ler tokens para qualquer API que você não possua, incluindo os tokens neste exemplo, em seu código. Tokens para serviços da Microsoft podem usar um formato especial que não será validado como um JWT e também pode ser criptografado para usuários consumidores (conta da Microsoft). Embora a leitura de tokens seja uma ferramenta útil de depuração e aprendizado, não use dependências sobre isso em seu código ou assuma detalhes sobre tokens que não são para uma API que você controla.