SSO 及 OAuth2.0

SSO

SSO是Single Sign On的缩写,使用令牌的方式来代替用户密码访问应用
SSO是一种思想,而CAS只是实现这种思想的一种框架

流程:

  • 用户输入网址进入业务系统Protected App,系统发现用户未登录,将用户重定向到单点登录系统CAS Server,并带上自身地址service参数
  • 用户浏览器重定向到单点登录系统,系统检查该用户是否登录,这是SSO(这里是CAS)系统的第一个接口,该接口如果用户未登录,则将用户重定向到登录界面,如果已登录,则设置全局session,并重定向到业务系统
  • 用户填写密码后提交登录,注意此时的登录界面是SSO系统提供的,只有SSO系统保存了用户的密码,
  • SSO系统验证密码是否正确,若正确则重定向到业务系统,并带上SSO系统的签发的ticket
  • 浏览器重定向到业务系统的登录接口,这个登录接口是不需要密码的,而是带上SSO的ticket,业务系统拿着ticket请求SSO系统,获取用户信息。并设置局部session,表示登录成功返回给浏览器sessionId(tomcat中叫JSESSIONID)
    之后所有的交互用sessionId与业务系统交互即可

OAuth2.0

OAuth是Open Authority的缩写,使用令牌的方式来代替用户密码访问应用

角色

有授权服务器、资源服务器、客户端

授权服务器是用来做认证的,客户端就是各个应用系统,我们只需要登录成功后拿到用户信息以及用户所拥有的权限即可

四种模式

  • 授权码(authorization-code):第三方应用先申请一个授权码,然后再用该码获取令牌。这种方式是最常用的流程,安全性也最高,它适用于那些有后端的 Web 应用。授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。这样的前后端分离,可以避免令牌泄漏。
  • 隐藏式(implicit):Web 应用没有后端。必须将令牌储存在前端。RFC 6749 规定了第二种方式,允许直接向前端颁发令牌。这种方式没有授权码这个中间步骤,所以称为(授权码)“隐藏式”(implicit)
  • 密码式(password):RFC 6749 也允许用户把用户名和密码,直接告诉该应用。该应用就使用你的密码,申请令牌,这种方式称为"密码式"(password)。
  • 客户端凭证(client credentials):适用于没有前端的命令行应用,即在命令行下请求令牌。

你可能感兴趣的:(架构,前端,服务器,java)