Como obter o acesso JWT de autenticação fácil do Azure
Eu tenho um Serviço de Aplicativo do Azure no qual habilitei a Autenticação / Autorização e configurei o AD como o provedor de autenticação.
Tudo/.auth
existem rotas no serviço e posso efetuar login. Após o login bem-sucedido, posso ligar/.auth/me
para obter oaccess_token
. A resposta é semelhante a:
[
{
"access_token": "AQABAAAAAA...Gni4EiQgAA",
"expires_on": "2017-02-28T19:17:08.0000000Z",
"id_token": JWT TOKEN
...
}
]
Então eu uso oaccess_token
no cabeçalho do portador da autorização para solicitar dados do serviço.
"Authorization": "Bearer " + "AQABAAAAAA...Gni4EiQgAA"
Meu serviço retorna o seguinte erro
IDX10708: 'System.IdentityModel.Tokens.JwtSecurityTokenHandler' cannot read this string: 'AQABAAAAAA...Gni4EiQgAA'.
The string needs to be in compact JSON format, which is of the form: '<Base64UrlEncodedHeader>.<Base64UrlEndcodedPayload>.<OPTIONAL, Base64UrlEncodedSignature>'.
De acordo comessa discussão aaccess_token
destina-se a ser usado como um token de portador. Eu também liaqui que oaccess_token
deve ser codificado em base64, mas isso não parece ser o caso.
Além disso, se eu usar oid_token
como um token de portador, a autenticação funciona conforme o esperado (oid_token
está no formato JWT).
Editar
Quando eu implemento manualmente o fluxo Oauth, conforme descritoaqui, Recebo um JWT adequadoaccess_token
.
GET
https://login.microsoftonline.com/common/oauth2/authorize?client_id=client_id&response_type=code&redirect_uri=redirect_uri
Seguido por
POST
https://login.microsoftonline.com/common/oauth2/token
grant_type=authorization_code
client_id=client_id
code=CODE FROM ABOVE
redirect_uri=redirect_uri
resource=resource
client_secret=client_secret
RESPONSE
{
"access_token": JWT TOKEN,
"token_type": "Bearer",
...
}