从 Oauth2 中的另一个资源获取资源

Posted

技术标签:

【中文标题】从 Oauth2 中的另一个资源获取资源【英文标题】:Getting resource from another resource in Oauth2 【发布时间】:2018-10-18 04:13:36 【问题描述】:

所以这里有一个案例: 我有身份服务器、客户端应用程序和资源(API)。身份服务器在端点http://identityserver:8080/connect/userinfo 上提供用户信息。如果您使用有效的访问令牌发送请求,您将获得有关用户的其他信息。 如果我需要有关资源的这些信息,我将如何获得它。我有两个想法:

    通过客户端获取用户信息。 (客户端在 userinfo 端点上发送请求并获取信息,然后通过请求调用 API 发送。) 资源 API 使用访问令牌在 userinfo 端点本身上创建请求。这里的问题是,如果我想从令牌存储中获取令牌值,那么它是不受支持的信息(Java Spring),所以基本上我在资源服务器上没有访问令牌。

我知道 userinfo 端点基本上是资源,所以我的问题是如果我想从另一个资源中获取资源并保持围绕 OAuth2 和 OpenID 连接的所有最佳实践,该如何进行。

【问题讨论】:

出于好奇,您需要这些关于什么资源的信息? 我需要电子邮件地址。在 API 中,我生成 pdf,我想将其发送给登录的用户。 所以您只是想要一种让您的 API 调用 userinfo 端点的方法? 是的,但为此我需要访问令牌并将其添加到标头并使用resttemplate 调用它,但我无法在春季访问令牌存储中的令牌。当我在 accesstoken a 上调​​用 getValue 时,我会得到 org.springframework.security.oauth2.provider.token.store.jwk.JwkException: This operation is not supported 在这个问题上我发现也许这个***.com/questions/19556039/… 我可以获得授权标头,但我仍然想知道哪种方法更好,这样做是否安全,或者是否会最好根据客户的要求发送电子邮件? 【参考方案1】:

解决方案是使用不同的授权类型。最合适的是客户端凭据。需要一个身份服务器来注册一个新的客户端 ID 和密钥,用于交换 API 的访问令牌。

【讨论】:

【参考方案2】:

访问令牌(我假设)可用于您的 API,因此假设令牌包含正确的范围,您可以简单地将其传递给其他 API(例如 userinfo 端点)。

我建议您创建自己的抽象,以便获取当前请求中使用的原始环境令牌,以便您可以使用它来调用其他 API。

【讨论】:

以上是关于从 Oauth2 中的另一个资源获取资源的主要内容,如果未能解决你的问题,请参考以下文章

如何从xml中的另一个包加载资源?

Spring安全中的Oauth2客户端

Oauth2 数据库表说明

如何使用 client_credentials 从资源服务器访问另一个 oauth2 资源?

Spring boot Oauth2:使用 Feign、Ribbon、Zull 和 Eureka 从客户端到资源的令牌中继

OAuth2.0实现原理