SSO 单点登录实现方案选型

2024-07-10 15:19:31 +08:00
 cxhello

想了解下各位 V 友公司目前采用的单点登录方案是哪种?我列了 4 种,如果有更好的方案大家可以发出来。😂

  1. Cookie ;
  2. 分布式 Session ;
  3. JWT ;
  4. OAuth2 ;
3181 次点击
所在节点    程序员
20 条回复
cheneydog
2024-07-10 15:29:09 +08:00
封一个模块都支持上最好
zealotxxxx
2024-07-10 15:40:29 +08:00
其实你要实现用户登出的话,最好还是带状态
zealotxxxx
2024-07-10 15:41:19 +08:00
jwt 是不带状态的,Oauth2 默认不带,可以带。

实现登出和强制下线都需要带状态的实现
ChoateYao
2024-07-10 15:44:22 +08:00
建议你看看 Cas Server 的方案,很多 SSO 系统都是按照这个方案去实现的
cxhello
2024-07-10 15:44:43 +08:00
@zealotxxxx 是的,退出看有的方案认证中心和其他子系统采用一套 redis ,我觉得这个不太靠谱。
snipking
2024-07-10 16:04:00 +08:00
你是为了做 sso server ,让别的应用来接入,还是为了自己的应用能接入 sso server 呢?

业内已经有广泛使用的标准协议了呀,OpenID ,SAML ,OIDC ,OAuth2 ,如果是为了做 sso server ,当然是各种协议都要支持,建议直接用现成的比如 keycloak ,因为还涉及协议间转换的问题。

如果是自己做应用,建议做一个 OAuth2 足矣。

JWT 只是 token ,和上述协议无可比性,比如 OAuth2 issue 的 token 就可以是 JWT 。
mirrornighth
2024-07-10 16:19:31 +08:00
@snipking 我也觉得是和 jwt ,cookie 等这些无关
cxhello
2024-07-10 16:22:17 +08:00
@snipking 好的,我再去了解了解,感谢 V 友。
Ayanokouji
2024-07-10 16:33:48 +08:00
OIDC
ny562kPWNJK9g86f
2024-07-10 16:58:31 +08:00
1 和 2 需要混合起来用
jiakme
2024-07-10 17:09:25 +08:00
需要区分应用场景:
1. 小型(集中/分布式)应用: 建议 session 模式, 而非 token, 维护成本远低于 token
2. 中型分布式应用: 两者均可, 分布式 session 可做两层缓存, 同步也不成问题; token 模式需要考虑登出, 黑名单等等场景, 成本不低.
3. 大型分布式应用: 建议 token 模式, 此时 session 同步会成为问题.
不论何种模式, 一定要封装前端请求组件和后端拦截器组件, 方便后期调整维护.
zzl22100048
2024-07-10 17:23:00 +08:00
OIDC
oauth2 只是个授权协议,OIDC 才是用来做认证的
cxhello
2024-07-10 17:25:45 +08:00
@jiakme 退出登录 Token 如何处理?子系统公共拦截器组件本质还是会校验通过。
Mikex88
2024-07-10 17:30:21 +08:00
lucifer4he
2024-07-10 17:31:50 +08:00
微软的 AAD 接入了直接用,不自己实现啥
cxhello
2024-07-10 17:31:52 +08:00
@jiakme 认证中心维护黑名单,业务子系统去查询吗?
Jasckcc
2024-07-10 17:41:55 +08:00
CAS 可以
zealotxxxx
2024-07-11 10:14:40 +08:00
@cxhello 你可以有两个模式:session 模式和 token 模式,token 模式是无状态的,用于给业务之间的授权逻辑。
session 模式处理用户登陆的。
jiakme
2024-07-15 19:30:08 +08:00
@cxhello 退出登录 Token 如何处理?建议了解一下 oauth2 协议.
jiakme
2024-07-15 19:30:57 +08:00
@cxhello 认证中心维护黑名单,业务子系统去查询吗? 网关统一处理认证, 管控用户进入. 内部服务只解析用户信息.

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

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

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

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

© 2021 V2EX