美文网首页
2023-01-20 单点登录原理与java主流框架

2023-01-20 单点登录原理与java主流框架

作者: 刘明_d589 | 来源:发表于2023-02-04 01:10 被阅读0次

    什么是单点登录

    单点登录(Single Sign On),简称为 SSO,是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
    单点登录所达到的效果如下图所示,在多应用的情况下,由统一的认证服务负责登录态,用户可以做到一站登录,多应用打通,多个应用之间可能是不同的域名,无法共享cookie。


    image.png

    要达到单点登录的效果,需要认证机制来支持,一是认证系统要授权应用系统使用自己的登录态,二是要保证整个流程的安全性,这里不得不提到授权协议,单点登录一般借助OAuth的授权流程来保证安全性。

    什么是OAUTH2:

    OAuth(Open Authorization,开放授权)是一个开放标准的授权协议,允许用户授权第三方应用访问他们存储在资源服务上受保护的信息,而不需要将用户名和密码提供给第三方应用,解耦了认证和授权。OAuth作为一种国际标准,目前传播广泛并被持续采用。OAuth2.0是OAuth协议的延续版本,更加安全,更易于实现。 OAuth 2.0是目前最流行的授权机制,用来授权第三方应用,获取用户数据.

    OAuth2四种授权模式
    客户端必须得到用户的授权(authorization grant),才能获得令牌(access token)。OAuth 2.0 规定了四种获得令牌的流程,可以选择实际情况选择最适合的一种,向第三方应用颁发令牌。

    授权码模式(authorization-code):最常用的流程,安全性也最高,它适用于那些有后端的 Web 应用。授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。这样的前后端分离,可以避免令牌泄漏。


    image.png

    简化模式(implicit): 有些 Web 应用是纯前端应用,没有后端。这时就不能用上面的方式了,必须将令牌储存在前端。RFC 6749 就规定了第二种方式,允许直接向前端颁发令牌。这种方式没有授权码这个中间步骤,所以称为(授权码)"隐藏式"(implicit)。


    image.png

    密码模式(password): 直接使用Resource owner提供的username和password来直接请求access_token(直接发起Access Token Request然后返回Access Token Response信息)。这种模式一般适用于Resource server高度信任第三方Client的情况下 。我们暂不讨论这种模式。

    客户端模式(client credentials):Client直接以自己的名义而不是Resource owner的名义去要求访问Resource server的一些受保护资源。
    适用于服务器间通信场景,直接根据client的ID和密钥即可获取token,无需用户参与。这种模式比较合适消费api的后端服务。我们暂不讨论这种模式。

    SSO集成oauth2的机制,SSO整体流程一般如下图所示:

    image.png

    java生态下主流SSO框架

    spring security + oauth2:

    1.概念
    资源服务器

    security:
      oauth2:
        client:
          client-id: demo-client
          client-secret: demo-secret
          user-authorization-uri: http://localhost:8080/oauth/authorize
          access-token-uri: http://localhost:8080/oauth/token
        resource:
          jwt:
            key-uri: http://localhost:8080/oauth/token_key
            key-value: demo
        authorization:
          check-token-access: http://localhost:8080/oauth/check_token
    

    鉴权服务:

    sa-SSO

    参考:
    https://jenkov.com/tutorials/oauth2/authorization.html

    https://help.aliyun.com/document_detail/174227.html

    相关文章

      网友评论

          本文标题:2023-01-20 单点登录原理与java主流框架

          本文链接:https://www.haomeiwen.com/subject/mpkqhdtx.html