【问题标题】:OAUTH2 + OpenID Connect what endpoint to use for adding some scopes for the user?OAUTH2 + OpenID Connect 使用什么端点为用户添加一些范围?
【发布时间】:2019-07-28 02:11:17
【问题描述】:

我有:

  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)吗?

【问题讨论】:

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


    【解决方案1】:

    真的,就像设计问题的情况一样,这取决于。

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

    另一方面,OAuth 及其关联的access_token 用于授权。访问令牌通常会声明有关客户端被授权做什么的声明。客户可能能够做的事情可能与用户的角色不同。

    想想这位客户需要做出哪些决定。它可以根据从/userinfo 响应中推断出的角色来选择可以显示哪些页面。

    想想这个客户将与什么通信。也许它会与资源服务器通信。如果客户端通过登录时获得的access_token,那么该令牌应该指示客户端被授权做什么。

    【讨论】:

    • 所以基本上如果有多个用户界面和多个微服务用于不同的功能,最好在 access_token 中提供用户角色信息,然后将其传递给不同的微服务,然后决定用户可以做什么。以及使用 /userinfo 在页面上显示功能,例如该用户可以看到什么(以及他可以做什么)?
    • 这是一种看待它的方式,是的。固定它的麻烦在于有很多方法可以做事。例如,您可能只想在微服务中使用客户端凭据,这意味着您不会使用用户的 access_token。诸如“谁授权此客户端与此微服务通信?”之类的问题。可能会有所帮助。如果答案是“用户”,那么,是的,您可能更愿意发送用户绑定的 access_token。
    猜你喜欢
    • 2015-04-23
    • 1970-01-01
    • 2015-10-09
    • 2018-08-11
    • 2017-07-04
    • 2018-04-17
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多