公司内部系统单点登录求求大佬给个方案

2022-02-23 11:02:47 +08:00
 DimitriYoon

公司想把以前的项目集中起来 我用 SpringCloud alibaba 搭了一个架子,用 gateway 做的网关,Spring Security Oauth2 做一个认证模块。 现在想要在后续的开发中把其他系统也集成到这个微服务中,然后统一从认证模块登录,登录完成之后其他模块不再需要登录。

但是目前是前后端分离的模式,前端是用 nginx 跑的,如何实现我现在毫无头绪,球球大佬们解答惹!

5174 次点击
所在节点    Java
37 条回复
yogogo
2022-02-23 13:53:58 +08:00
看你描述,你对前后端分离不是很了解啊,这就开始搭架子这不是在给自己找坑吗
DimitriYoon
2022-02-23 14:01:29 +08:00
@yogogo 嗯哼?能说说您的概念吗?
DimitriYoon
2022-02-23 14:02:32 +08:00
@giiiiiithub 所以我感觉没有必要再用 token 的方式了,直接 session 梭哈
MYlyc
2022-02-23 14:05:58 +08:00
建议用 sa-token ,看看文档里对于单点登录的方案
SjwNo1
2022-02-23 14:08:44 +08:00
虽然但是,cookie-session 吧
DimitriYoon
2022-02-23 14:09:28 +08:00
@MYlyc 十分感谢,我看了一下文档确实非常不错!
JKeita
2022-02-23 14:20:19 +08:00
统一服务登录,登录会话保存在服务端,之后其他前端项目通过接口请求自己项目服务端获取登录信息,没有获取到则让前端跳转到统一登陆服务界面并且带上回调的项目接口地址,统一登录服务验证已经通过重定向到项目回调地址并带上一个 token ,然后前端将该 token 保存本地,并通过该 token 去取用户登录数据。
yogogo
2022-02-23 14:26:06 +08:00
@DimitriYoon
#22 前后端分离,后端只要关心请求是否认证过就行了,至于前端如何校验认证就不用管了;如果所有请求都是走 gateway ,那只要 gateway 做一个认证登陆的入口,认证后返回 token ,请求的时候带上认证的 token ,交给 gateway 统一认证就行了;
jwt 跟 session 只是存放认证位置不同而已,本质是一样的;
DimitriYoon
2022-02-23 14:31:28 +08:00
@yogogo 其实我的问题还是如果采用 token 的情况,前端不同域无法传递 token ,比如我认证服务器下发,用户从前端拿到了 token ,不同域的其他站点如何拿到呢。我的问题其实是后端如何写才能配合前端多站点的部署方式
JKeita
2022-02-23 14:45:42 +08:00
@DimitriYoon 你在统一登录界面登录之后,只要通过页面跳转,就能把 token 传给不同域名的前端。
0312birdzhang
2022-02-23 14:46:22 +08:00
9136347
2022-02-23 14:46:47 +08:00
ldap
GayGayUp
2022-02-23 15:28:56 +08:00
Spring Security Oauth2 太复杂,sa-token 了解一下,比较简单。
zzl22100048
2022-02-23 17:25:03 +08:00
@GayGayUp @frank1256
Oauth2 是授权协议,OIDC 才是认证协议
rootit
2022-02-23 18:02:21 +08:00
1 用户输入账号密码
2 经过统一认证服务的登录接口校验,成功多加一个 header Auth:base64 值 ,这个值可以是 uuid 反正就是跟 redis 里 set 的用户登录信息能关联就行
3 其他系统不就有这个 header 了 注销就把 redis 里的用户登录信息清理了
4 其他系统通统一认证服务的 /auth 或者 /getOwn 接口校验是否登录,如果带着合法的 header 返回正常,不合法返回未登录。
Cookieeeeee
2022-02-23 18:13:54 +08:00
目前的这个 体验不错 https://authing.co/
sanyuedev
2022-09-02 15:32:06 +08:00
@gadfly3173 这个不错,但是要怎么去控制,用户只能访问特定的系统呢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/835870

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX