如何将访问令牌获取委托给BFF?



关于如何从客户端(web/mobile…)安全访问资源api有几个选项,近年来,在JS/TS中为spa实现OIDC是很常见的,这已不再推荐。

对于SPA的建议是避免在浏览器中存储令牌或使用service worker,并使用BFF而不是直接连接到身份服务器。

在这种方法中,BFF作为身份服务器的代理并处理所有的oauth请求。

使用spring BFF实现此模式的最佳实践是什么,或者是否有其他更好的方法。

也许你知道这个解释选项的文档。假设你正在使用SPA,不想要网站选项,有两个选项,从安全的角度来看是相同的,你使用哪个是你的偏好问题。

WEB端

SPA首先向web后端发送OAuth和API请求,web后端转发它们并实现OAuth客户端。web后端使用发出cookie的运行时。

pro是一个更容易的初始开发人员设置和更少的组件部署。缺点是所有开发人员都必须运行后端,并且web部署选项仅限于那些可以托管运行时的选项。

反向代理后端

SPA通过NGINX等反向代理发送OAuth和API请求。OAuth请求被转发到实用程序API。web后端只保留静态内容。

的优点是,你可以摆脱cookie发布运行时从开发人员的个人电脑,更容易做的事情,如部署web资源到内容交付网络。缺点是最初的开发人员设置比较困难,并且有更多的移动部件。

在这两种情况下,SPA使用这样的url,用于静态内容,oauth客户端和API路由责任。

  • https://www.example.com
  • https://www.example.com/oauth-client
  • https://www.example.com/api

在oauth-client路径中,SPA像这样调用端点。SPA OAuth代码很轻:

  • POST/登录/开始
  • POST/登录/结束

实现

有相当多的组件,包括您可以插入的组件。搜索一个术语,比如BFF OAuth,然后做一些阅读。但这是一个旅程——饼干是复杂的小东西。

我刚刚在我的一个仓库中添加了一个教程,用于将spring-cloud-gateway配置为使用会话(Secure HttpOnly cookie)保护的浏览器应用程序和OAuth2资源服务器之间的BFF。

这个示例使用Angular作为UI框架,我对spring-boot-starter-oauth2-resource-server的一个薄包装,并使用Keycloak作为授权服务器,但这是实现细节,所有的工作都是由BFF完成的。

最新更新