【问题标题】:OpenID Connect scope/role discoveryOpenID Connect 范围/角色发现
【发布时间】:2016-12-08 08:52:02
【问题描述】:

我最近了解了 OIDC 如何在 OAuth 2 之上提供用户身份,并且还设法创建了一个 OIDC 登录到我的 web 应用程序。但是,当涉及到授权部分时,不清楚应用程序应该如何知道请求 API 的范围?

例如,某些端点应该受到“管理员”范围的保护,并且相应的 UI 元素应该对非管理员用户隐藏。我可以轻松实现强制部分,但是当用户登录时,应用程序需要知道用户是否是管理员 - 即是否请求“管理员”范围/显示与管理员相关的 UI 部分。

是否有任何标准方法可以在来自 IDP 的用户个人资料中表示特定于应用的详细信息?最令我不安的是,据我所知,此类信息无法添加到来自例如 Google/Twitter/Facebook 的用户配置文件中,因此需要 a)额外的层(IdentityServer/OpenAM/等),或 b)额外的webapp 数据库中的用户配置文件数据。

我的第一个想法是通过执行 a) 添加自定义声明 - 但是在与现有 IDP 集成时,可能无法调整所有用户配置文件(例如大型企业数据库),所以我假设应用程序它本身应该足够灵活,可以将现有的用户配置文件数据转换为“管理员/非管理员”。

有没有更好的解决方案?

【问题讨论】:

    标签: oauth-2.0 openid-connect


    【解决方案1】:

    在我看来,将您的授权基于您的身份提供者返回的声明并不是一个好的做法。 这个责任应该委托给 UMA 服务器。由他决定是否授予对受保护资源的请求访问权限。 例如,我们有以下场景的图像:

    背景:一家电子商务企业内部开发了一种工具,供其营销团队使用,以检索有关其最忠实客户的信息。 该应用程序是在 WPF 中开发的,并与 RESTFUL API 交互以检索客户端。 只有该应用程序和属于营销组的用户有权检索该列表。

    问题:应用程序如何访问受保护的操作?

    workflow

    解决方案:工作流程由三大步骤组成:

    • 身份令牌:检索具有隐式授权类型的身份令牌。令牌在回调参数中返回给客户端
    • RPT 令牌:身份和访问令牌(对范围 uma_authorization 和 uma_protection 有效)在请求中传递以检索 RPT 令牌。 当 WPF 应用程序接收到令牌时,令牌会在 Authorization 标头中传递以检索忠实客户。这两个参数都是授权策略所必需的。
    • 检查 RPT 令牌 :根据自省端点检查令牌,该端点由 UMA 服务器提供。

    如您所见,UMA 服务器使用内部策略来授予/不授予对资源的访问权限。 授权策略超出了 UMA 规范的范围,你必须自己定义它:'(。 我开发了一个产品(开源)来轻松管理授权策略。如果您有兴趣,可以在这里测试演示: http://lokit.westus.cloudapp.azure.com/Demo

    注意:如果您对外部身份提供者返回的声明不满意,您可以随时丰富它们(阅读用例:文档中的“将角色分配给资源所有者”)

    【讨论】:

      猜你喜欢
      • 2018-12-28
      • 2018-10-19
      • 2015-02-05
      • 2023-03-20
      • 1970-01-01
      • 2015-07-15
      • 2018-07-12
      • 2015-06-15
      • 2019-12-21
      相关资源
      最近更新 更多