【问题标题】:Azure AD : can an access token for a given application be used to retrieve an access token for a different application?Azure AD:是否可以使用给定应用程序的访问令牌来检索不同应用程序的访问令牌?
【发布时间】:2020-03-06 20:32:13
【问题描述】:

考虑到 2 个应用程序下的 Azure AD 是相同的,这应该是可能的,但我不确定如何实现这一点?有什么建议吗?

【问题讨论】:

  • “检索不同应用程序的访问令牌”是什么意思?请提供更多详细信息。也许是一个例子?
  • 访问令牌包含的声明可能是诸如权限或范围或应用程序/apis + 对这些应用程序的权限之类的东西。在您的代码正在运行的应用程序的上下文中,您可能能够检索证明您已成功通过身份验证但可能不包含您所追求的声明/权限的令牌。例如,Microsoft Teams 中运行的代码可以访问的访问令牌,但可能无法让您使用您感兴趣的服务(例如 microsoft graph)。拥有一个访问令牌,您可以通过 auth 获得另一个访问令牌吗?,跨度>

标签: authentication azure-active-directory adal msal


【解决方案1】:

你需要了解refresh token

在当前访问令牌过期后,应用可以使用此令牌获取额外的访问令牌。 Refresh_tokens 是长期存在的,可用于长时间保持对资源的访问。

所以你需要在请求第一个访问令牌时获取刷新令牌。

然后您可以使用此刷新令牌来获取另一个资源(或范围)的新访问令牌。

// 换行只是为了便于阅读

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
&refresh_token=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq...
&grant_type=refresh_token
&client_secret=JqQX2PNo9bpM0uEihUPzyrh      // NOTE: Only required for web apps. This secret needs to be URL-Encoded

您应该修改scope。如果您的第一个访问令牌用于资源 Microsoft Teams,您现在可以将 socpe 修改为 https://graph.microsoft.com/.default。然后您将获得一个访问令牌,用于访问 Microsoft Graph 资源。

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 2012-06-21
    • 2013-08-22
    • 2017-09-19
    • 2017-08-22
    相关资源
    最近更新 更多