spring 调用我的API的系统的OAuth2客户端凭据或永久令牌?

b1zrtrql  于 12个月前  发布在  Spring
关注(0)|答案(2)|浏览(117)

我们有一个Sping Boot API,用户在使用它的端点之前,在JWT方案下使用他们的凭证进行身份验证。我的问题是,我们是否应该按照OAuth2 Client Credentials赠款规范的建议,实现一个授权服务器和一个资源服务器?在这种情况下,我们的聊天机器人是否需要定期使用它的cliendid和secret进行身份验证?我们在考虑为客户端聊天机器人提供一个永久令牌,以避免永久身份验证。我们不希望客户端每次调用API时都必须获得令牌,我们想给给予客户端一个已经生成的令牌,它将在每个请求中使用,从而避免令牌获取步骤。这种方法是否不安全?在这种情况下,哪种方法更可取?

ibps3vxo

ibps3vxo1#

据我所知,最佳实践是使用OAuth2 Client Credentials,因为它的设计和更安全,如果你只有这两种方法:
此流程(OAuth2 Client Credentials)对于需要在没有用户的情况下执行API操作的系统非常有用。它可以是夜间操作,也可以是涉及联系OAuth保护的API的其他操作。
但是这些API调用(聊天机器人)是由最终用户触发的,如果我理解正确的话,在这种情况下,你必须实现Authorization Code Flow
如果它是基于spring的应用程序,你可以从spring-boot提供的启动器文档开始。
Oauth2 - Resource Server/Client Part
spring-authorization-server

mwngjboj

mwngjboj2#

the tutorial you used中使用的流不是OAuth2,并且由于使用JWT作为前端会话所固有的安全漏洞,因此暴露的解决方案在许多地方被认为是最差实践。忘记它吧。

如果您希望您的应用符合OAuth2,则应将所有REST API服务配置为资源服务器。
如果您的前端是服务器端呈现的,请使用oauth2Login将其配置为OAuth2客户端。
如果您的前端是单页应用程序或移动的应用程序,则它不应该是OAuth2客户端(这些只能是“公共”OAuth2客户端,您应该使用BackendFFrontend作为“机密”OAuth2客户端,并在会话与基于CSRF的安全性之间建立桥梁(在前端和BFF之间)和基于令牌的安全性(在BFF和资源服务器之间)。spring-cloud-gateway可以用于此目的,具有oauth2Login,CSRF保护和TokenRelay过滤器。
对于资源服务器间通信,有两个选项:

  • 转发来自原始请求的访问令牌(从服务A到服务B的请求代表发起对服务A的请求的资源所有者)
  • 使用client_credentials流获取一个新的访问令牌(从服务A到服务B的请求,由服务A以自己的名称发出,没有用户的上下文)

这两个选项的实现细节取决于您选择的REST客户端(当前推荐的Spring客户端是WebClientRestClient@FeignClient)。一旦您选择了REST客户端和授权策略,请参阅相应的文档。

相关问题