OAUTH2 + OpenID连接哪个端点可用于为用户添加某些范围?

时间:2019-03-06 11:59:42

标签: oauth-2.0 spring-security-oauth2 openid-connect

我有:

  1. 具有一些公共端点和私有端点的Spring Boot客户端应用程序,例如,需要 @PreAuthorize(“#oauth2.hasScope('resource.read')”)
  2. 我有一个外部授权服务器:Cloudfoundry UAA
  3. 我有一个链接到UAA的外部OIDC提供程序,我可以使用它来认证一个人,我从该外部OIDC提供程序从ID_Token收到一个Person_ID
  4. 现在,我需要更改UAA核心代码,以实现使用该Person_ID并从共享相同Person_ID的LDAP中搜索等效用户的逻辑,然后将其用户组添加到客户端的令牌中。 (我目前已在/ userinfo端点中完成此操作)

因此,我在/ userinfo端点中完成了此逻辑,当客户端收到访问令牌时(从客户端,重定向到UAA,从UAA重定向到OIDC进行AUTH,然后再次返回该令牌,然后将此令牌发送到客户端,现在客户可以获取令牌并要求/ userinfo,然后将具有用户角色)

这是不好的逻辑吗?是否应该以某种方式在访问令牌中添加LDAP实现(步骤4)?

1 个答案:

答案 0 :(得分:0)

真的,这取决于设计问题,通常要视情况而定。

要记住的关键是OIDC及其关联的id_token用于身份验证。 /userinfo响应通常会声明有关用户身份的声明。用户身份的一部分可能是他们的角色。

另一方面,

OAuth及其关联的access_token用于授权。访问令牌通常会声明有关授权客户端执行操作的声明。客户端可能执行的操作可能与用户的角色不同。

考虑此客户将需要做出哪些决定。它可以根据从/userinfo响应中推断出的角色来做出选择,例如可以显示其页面。

考虑此客户端将与之通信的内容。也许它将与资源服务器通信。如果客户端通过了登录期间获得的access_token,则该令牌应指示客户端有权执行的操作。