4

我正在使用 Xamarin.Auth 在基于 Xamarin Forms 的移动应用程序中针对 Google 和 Azure AD 对用户进行身份验证。虽然谷歌一切正常,但我无法使用 Azure AD 获得 access_token:

  • 授权按预期工作,提供代码和状态
  • Token 返回一个 id_token 和一个 refresh_token,但没有 access_token。

我可以在 Postman 中重播这个场景,所以这似乎不是由 Xamarin.Auth 引起的,更有可能归咎于我无法正确解释 Microsoft 的文档......

您的帮助将不胜感激!

在此处输入图像描述

4

1 回答 1

6

在 Azure AD V2.0 中获取令牌时应包括资源范围。任何与 Azure AD 集成的 Web 托管资源都具有资源标识符或应用程序 ID URI。例如,Microsoft Graph 是https://graph.microsoft.com.

如果您想获取 microsoft graph 的访问令牌,并有权读取登录用户的邮件,那么令牌请求将是:

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

client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&scope=https%3A%2F%2Fgraph.microsoft.com%2Fmail.read
&code=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq3n8b2JRLk4OxVXr...
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&grant_type=authorization_code
&client_secret=JqQX2PNo9bpM0uEihUPzyrh    // NOTE: Only required for web apps

请阅读此文档以了解 OAuth 2.0 授权代码流在 Azure AD V2.0 中的工作原理。单击此处了解 Azure Active Directory v2.0 端点中的范围、权限和同意

于 2017-08-24T05:23:52.320 回答