spring security使用OAuth2授权码方式登录时授权码是返回给client的服务器还是前端呢

问题描述

各位大佬好,祝大家新年快乐,身体健康。
假设我现在要开发一个非跨域的单点登录系统,如登录了1.a.com也可以登录2.a.com。按照网上的教程,流程应该是点击登录按钮重定向至认证中心后输入认证中心注册过的账号密码进行登录,这个时候认证中心根据client的redirect_uri带上授权码 code回调至某个地方。我现在就是在纠结这个地方是哪里。
1.返回给client的后端,我在网上看到的教程都是这样的,在后端拿到授权码后,通过比如restTemplate等工具封装http请求带上授权码,client_id,client_secret等参数访问认证中心获得access_token,然后返回一个html页面,这样html页面就能拿到access_token了。但这是基于前后端不分离架构,如果是前后端分离架构,后端该如何将access_token返回给前端呢?如果就存储在后端,不返回给前端,那不就需要在后端就行持久化吗?这就没了jwt服务端无状态的优势呀。
2.返回给client的前端,那前端拿到授权码code后需要携带client_secret参数去请求access_token,前端如何安全地获取client_secret呢?补充:目前想到一个方法是redirect_url指向前端,前端拿到url中的code后,再带上code去请求后端方法,后端拿到access_token后再返回给前端,但是这样的话前端会暴露授权码,这样安全吗?

目前的一个猜测

使用node.js等中间层解决上述问题?

由于目前我都是在自学,网上搜索后也没能查找到相应解决方案,所以希望能够得到各位大佬的指点,十分感谢!

阅读 5.8k
2 个回答

https://github.com/a893359278...
可以看一下 auth 模块,把注释去掉,希望你能看得懂(手动滑稽)。。。

1、上文说的某个地方是指, redirect_url。
2、spring security 的 返回值是可以配置的, 作者你说的 返回一个 html 页面,这个是可以被配置的。
3、作者 集成的 应该是 spring security + Oauth + jwt 。 如果是使用这个框架。那么是可以通过配置返回 jwt token 的。 其中这个 token 是在 header 里。

最后献上 spring security 的视频教程 https://www.bilibili.com/vide...

补充回答一下: 这个是之前的版本,应该要看这部分的代码
https://github.com/a893359278...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题