【问题标题】:Azure AD exchange access_token with id_token v.1.0 endpointAzure AD 使用 id_token v.1.0 端点交换 access_token
【发布时间】:2018-03-09 20:10:04
【问题描述】:

我会画一个场景,需要一些建议:

我正在使用 Azure AD(v1.0 端点)、单页应用程序 (SPA) 和 Web API。 SPA 使用 OpenID Connect 建立用户身份,对用户进行身份验证并接收后端 Web API 的 id_tokenaccess_token

现在,我们不希望 SPA 根据在 SPA 应用中收到的id_token 进行访问控制决策。

相反,SPA 将 access_token 发送到后端 Web API 以访问它,现在我们希望后端 Web API 根据 @987654326 中的 roles 声明做出访问控制决策@,但后端没有从 SPA 接收到。

问题是,后端 Web API 是否可以将接收到的 access_token 发送到 Azure AD 令牌端点并为用户接收相关的 id_token,以便后端 Web API 接收到 @987654329 @ 包含用户的roles 声明,以便做出访问控制决策?

【问题讨论】:

    标签: asp.net-web-api oauth-2.0 azure-active-directory single-page-application openid-connect


    【解决方案1】:

    您所描述的方法存在几个问题:

    1. 应用角色将在本机客户端应用程序 (SPA) 上定义。虽然您可以在清单中从技术上定义应用角色,但您会注意到 Azure 门户不允许您将用户或组分配给本机客户端应用。 (这是有道理的,因为正如您所说的,您不想在本机客户端应用程序中进行任何访问控制。)
    2. 您无法按照您的描述进行操作(将针对某个受众的 access_token 交换为针对不同受众的 id_token)。您可以做一些代币交换的变体,但在这种情况下,它们都无法帮助您。

    相反,您应该在 Web API 上定义应用角色。然后,将用户分配给 Web API 的相应应用角色。当这些用户登录 SPA 并且 SPA 代表他们获取 Web API 的访问令牌时,您会注意到访问令牌将包含 roles 声明,并填充了适当的值。

    总结:

    1. 在 Web API 的应用注册下,在应用清单中定义您的 appRoles(或直接在应用程序对象上,使用(例如)Azure AD PowerShell)。
    2. 在适用于 Web API 的企业应用下,将用户和/或组分配给其相应的应用角色,并选择是否需要分配应用角色*。 (或者直接在 ServicePrincipal 对象上这样做。)
    3. 在 SPA(应用程序对象)的应用注册下,将 Web API 添加为所需权限。

    *如果您选择要求为 Web API 分配应用角色(在企业应用 > 属性下),则 SPA 将无法为未分配给 Web API 应用角色的用户获取访问令牌。如果您选择要求分配应用角色,则未分配应用角色的用户将能够登录 SPA,而 SPA 能够获得访问权限Web API 代表他们的令牌,但访问令牌将包含roles 声明。

    【讨论】:

      猜你喜欢
      • 2021-08-17
      • 2018-02-01
      • 2018-04-29
      • 2017-03-24
      • 2019-10-15
      • 2020-07-08
      • 2017-05-19
      • 2020-06-27
      • 1970-01-01
      相关资源
      最近更新 更多