【问题标题】:Azure AD token endpoint doesn't return an access_token (just an id_token and a refresh_token)Azure AD 令牌端点不返回 access_token(只是一个 id_token 和一个 refresh_token)
【发布时间】:2018-02-01 19:50:26
【问题描述】:

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

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

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

您的帮助将不胜感激!

【问题讨论】:

    标签: xamarin oauth-2.0 azure-active-directory xamarin.auth


    【解决方案1】:

    在 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
    

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

    【讨论】:

    • 感谢您的快速回复。那是我已经阅读过的文件。我使用的范围“openid offlineaccess”有什么问题吗? (我只想请求与offline_access 结合使用的最基本的访问权限)。因为除了范围之外,我无法区分您的示例和我正在使用的示例?
    • openid offline_access 是 OpenID Connect scopes 。请参阅[文档](docs.microsoft.com/en-us/azure/active-directory/develop/…)。如果没有像 "graph.microsoft.com/Fmail.read" 这样的资源范围,openid connect 将不会返回该资源的访问令牌,它只包括 id_token(显示你是谁)。访问令牌用于访问受保护的资源。在Azure AD token reference中查看更多详细信息
    • 感谢您的补充说明。将graph.microsoft.com/user.read 添加到范围解决了我的问题。
    • 如果您想要列出所有可用权限(范围),请参阅此处Microsoft Graph permissions reference。据我了解,您必须在权限前加上https://graph.microsoft.com/
    猜你喜欢
    • 2017-01-12
    • 2022-12-14
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    • 2018-03-09
    • 1970-01-01
    相关资源
    最近更新 更多