V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
cxhello
V2EX  ›  程序员

SSO 单点登录实现方案选型

  •  
  •   cxhello · 160 天前 · 2291 次点击
    这是一个创建于 160 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    1. Cookie ;
    2. 分布式 Session ;
    3. JWT ;
    4. OAuth2 ;
    第 1 条附言  ·  159 天前
    5. CAS
    第 2 条附言  ·  159 天前
    6. keycloak
    20 条回复    2024-07-15 19:30:57 +08:00
    cheneydog
        1
    cheneydog  
       160 天前
    封一个模块都支持上最好
    zealotxxxx
        2
    zealotxxxx  
       160 天前
    其实你要实现用户登出的话,最好还是带状态
    zealotxxxx
        3
    zealotxxxx  
       160 天前
    jwt 是不带状态的,Oauth2 默认不带,可以带。

    实现登出和强制下线都需要带状态的实现
    ChoateYao
        4
    ChoateYao  
       160 天前
    建议你看看 Cas Server 的方案,很多 SSO 系统都是按照这个方案去实现的
    cxhello
        5
    cxhello  
    OP
       160 天前
    @zealotxxxx 是的,退出看有的方案认证中心和其他子系统采用一套 redis ,我觉得这个不太靠谱。
    snipking
        6
    snipking  
       160 天前
    你是为了做 sso server ,让别的应用来接入,还是为了自己的应用能接入 sso server 呢?

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

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

    JWT 只是 token ,和上述协议无可比性,比如 OAuth2 issue 的 token 就可以是 JWT 。
    mirrornighth
        7
    mirrornighth  
       160 天前
    @snipking 我也觉得是和 jwt ,cookie 等这些无关
    cxhello
        8
    cxhello  
    OP
       160 天前
    @snipking 好的,我再去了解了解,感谢 V 友。
    Ayanokouji
        9
    Ayanokouji  
       160 天前
    OIDC
    ny562kPWNJK9g86f
        10
    ny562kPWNJK9g86f  
       160 天前
    1 和 2 需要混合起来用
    jiakme
        11
    jiakme  
       160 天前
    需要区分应用场景:
    1. 小型(集中/分布式)应用: 建议 session 模式, 而非 token, 维护成本远低于 token
    2. 中型分布式应用: 两者均可, 分布式 session 可做两层缓存, 同步也不成问题; token 模式需要考虑登出, 黑名单等等场景, 成本不低.
    3. 大型分布式应用: 建议 token 模式, 此时 session 同步会成为问题.
    不论何种模式, 一定要封装前端请求组件和后端拦截器组件, 方便后期调整维护.
    zzl22100048
        12
    zzl22100048  
       160 天前
    OIDC
    oauth2 只是个授权协议,OIDC 才是用来做认证的
    cxhello
        13
    cxhello  
    OP
       160 天前
    @jiakme 退出登录 Token 如何处理?子系统公共拦截器组件本质还是会校验通过。
    lucifer4he
        15
    lucifer4he  
       160 天前
    微软的 AAD 接入了直接用,不自己实现啥
    cxhello
        16
    cxhello  
    OP
       160 天前
    @jiakme 认证中心维护黑名单,业务子系统去查询吗?
    Jasckcc
        17
    Jasckcc  
       160 天前
    CAS 可以
    zealotxxxx
        18
    zealotxxxx  
       159 天前
    @cxhello 你可以有两个模式:session 模式和 token 模式,token 模式是无状态的,用于给业务之间的授权逻辑。
    session 模式处理用户登陆的。
    jiakme
        19
    jiakme  
       155 天前
    @cxhello 退出登录 Token 如何处理?建议了解一下 oauth2 协议.
    jiakme
        20
    jiakme  
       155 天前
    @cxhello 认证中心维护黑名单,业务子系统去查询吗? 网关统一处理认证, 管控用户进入. 内部服务只解析用户信息.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1028 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:39 · PVG 06:39 · LAX 14:39 · JFK 17:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.