OpenID Connect范围/角色发现

时间:2016-08-02 20:32:23

标签: oauth-2.0 openid-connect

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

例如,某些端点应使用“admin”范围进行保护,并且应向非管理员用户隐藏相应的UI元素。执行部分我可以轻松实现,但是当用户登录时,应用程序需要知道用户是否是管理员 - 即是否请求'admin'范围/显示与管理员相关的UI部分。< / p>

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

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

有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

在我看来,根据您的身份提供商返回的声明进行授权并不是一种好的做法。 应将此职责委托给UMA服务器。由他决定是否授予对受保护资源的请求访问权限。 例如,我们有以下情况的图像:

上下文:电子商务企业内部开发了一个由其营销团队使用的工具,用于检索有关其最忠诚客户的信息。 该应用程序已在WPF中开发,并与RESTFUL API交互以检索客户端。 只有此应用程序和属于营销组的用户才有权检索列表。

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

workflow

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

  • 身份令牌:使用隐式grant-type检索身份令牌。令牌以回调参数
  • 返回给客户端
  • RPT令牌:在请求中传递身份和访问令牌(对作用域uma_authorization&amp; uma_protection有效)以检索RPT令牌。 当WPF应用程序接收到令牌时,令牌将在Authorization标头中传递以检索忠诚客户端。授权策略都需要这两个参数。
  • 检查RPT令牌:对内省端点检查令牌,此端点由UMA服务器提供。

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

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