我们有一个Sping Boot API,用户在使用它的端点之前,在JWT方案下使用他们的凭证进行身份验证。我的问题是,我们是否应该按照OAuth2 Client Credentials赠款规范的建议,实现一个授权服务器和一个资源服务器?在这种情况下,我们的聊天机器人是否需要定期使用它的cliendid和secret进行身份验证?我们在考虑为客户端聊天机器人提供一个永久令牌,以避免永久身份验证。我们不希望客户端每次调用API时都必须获得令牌,我们想给给予客户端一个已经生成的令牌,它将在每个请求中使用,从而避免令牌获取步骤。这种方法是否不安全?在这种情况下,哪种方法更可取?
2条答案
按热度按时间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的
mwngjboj2#
the tutorial you used中使用的流不是OAuth2,并且由于使用JWT作为前端会话所固有的安全漏洞,因此暴露的解决方案在许多地方被认为是最差实践。忘记它吧。
如果您希望您的应用符合OAuth2,则应将所有REST API服务配置为资源服务器。
如果您的前端是服务器端呈现的,请使用
oauth2Login
将其配置为OAuth2客户端。如果您的前端是单页应用程序或移动的应用程序,则它不应该是OAuth2客户端(这些只能是“公共”OAuth2客户端,您应该使用BackendF或Frontend作为“机密”OAuth2客户端,并在会话与基于CSRF的安全性之间建立桥梁(在前端和BFF之间)和基于令牌的安全性(在BFF和资源服务器之间)。
spring-cloud-gateway
可以用于此目的,具有oauth2Login
,CSRF保护和TokenRelay
过滤器。对于资源服务器间通信,有两个选项:
这两个选项的实现细节取决于您选择的REST客户端(当前推荐的Spring客户端是
WebClient
,RestClient
和@FeignClient
)。一旦您选择了REST客户端和授权策略,请参阅相应的文档。