码迷,mamicode.com
首页 > 其他好文 > 详细

单点登录SSO

时间:2020-05-22 21:11:13      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:单点   提升   def   信息   就是   提交   blank   统一   完整   

OAuth2.0    JWT     以前的CAS

借助阿里云的应用身份服务

 

什么是登录

一、(session&cookie模式)

1、用户向服务器发送用户名和密码。
2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。
3、服务器向用户返回一个 session_id,写入用户的 Cookie。
4、用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器。
5、服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。

服务器保存session  客服端浏览器cookie一般存了个jsessionid的值,后面浏览器每次提交会自动带上该值

二、JWT(json web token)模式  

JWT头部           JWT有效载体          JWT签名

JWT头部    {"alg": "HS256","typ": "JWT"}   base64: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
JWT有效载体    { "sub": "1234567890", "name": "John Doe", "admin": true }   base64: eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9
JWT签名    HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)      base64: TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

JWT完整字符串:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

 

使用一般是请求头里加入Authorization,并加上Bearer标注。
Authorization: Bearer <token>

 

JWT有效载体中官方规定的7各字段

iss (issuer):签发人
exp (expiration time):过期时间
sub (subject):主题
aud (audience):受众
nbf (Not Before):生效时间
iat (Issued At):签发时间
jti (JWT ID):编号

 

单点登录

系统1:www.abc.com   系统2:www.def.com    系统3(SSO):www.sso.com

1:访问www.abc.com 由于没有登录访问 www.sso.com?service=www.abc.com
2:由于www.sso.com没有登录,提升用户输入用户名密码登录。
3:用户与SSO系统建立会话(生成一份Token,写到Cookie中,保存在浏览器上)
随后
5:系统ABC收到token后,通过后端向SSO验证token是否正确,如果正确系统ABC与用户建立局部会话(创建Session)
6:此时,用户想要访问系统DEF发现便没有登录这跳转到www.sso.com?service=www.def.com
7:因为用户与SSO系统建立了全局会话,访问www.sso.com?service=www.def.com时会带上cookie,
8:这时SSO系统已经登录,于是在重定向系统DEF, www.def.com?token= xxxxxxx
9:同样系统DEF收到token后,通过后端向SSO验证token是否正确,如果正确系统DEF与用户建立局部会话(创建Session)

一、cookie实现(必须统一域名,未来不可用苹果浏览器开发封杀chrome和firefox已经开始了)

app1.a.com    app2.a.com    sso.a.com

登录OSS.a.com是把cookie写在a.com域下,这样app1, app2都在该域下。通用了cookie

二、Jsonp和页面重定向技术

 

CAS:

一、我们看看访问app1系统时的流程

1:用户访问app1系统,app1系统是需要登录的,但用户现在没有登录。

2:跳转到CAS server,即SSO登录系统,以后图中的CAS Server我们统一叫做SSO系统。 SSO系统也没有登录,弹出用户登录页。

3:用户填写用户名、密码,SSO系统进行认证后,将登录状态写入SSO的session,浏览器(Browser)中写入SSO域下的Cookie。

4:SSO系统登录完成后会生成一个ST(Service Ticket),然后跳转到app1系统,同时将ST作为参数传递给app系统。

5:app1系统拿到ST后,从后台向SSO发送请求,验证ST是否有效。

6:验证通过后,app1系统将登录状态写入session并设置app域下的Cookie。

至此,跨域单点登录就完成了。以后我们再访问app1系统时,app1就是登录的。

二、接下来,我们再看看访问app2系统时的流程。

1:用户访问app2系统,app2系统没有登录,跳转到SSO。

2:由于SSO已经登录了,不需要重新登录认证。

3:SSO生成ST,浏览器跳转到app2系统,并将ST作为参数传递给app2。

4:app2拿到ST,后台访问SSO,验证ST是否有效。

5:验证成功后,app2将登录状态写入session,并在app2域下写入Cookie。

这样,app2系统不需要走登录流程,就已经是登录了。SSO,app和app2在不同的域,它们之间的session不共享也是没问题的。

 

OAuth2.0

各种第三方登录QQ登录,微信登录,一般都是使用标准的OAuth2.0

接入过第方登录的就知道,要有APP_ID 和APP_SECRET 主要包括(应用ID,应用名称,应用SECRET,和跳转地址)

1: 从信任角度来看。OAuth2.0授权服务端和第三方客户端不属于一个互相信任的应用群(通常都不是同一个公司提供的服务),第三方客户端的用户不属于OAuth2.0授权服务端的官方用户;而单点登录的服务端和接入的客户端都在一个互相信任的应用群(通常是同一个公司提供的服务),各个子系统的用户属于单点登录服务端的官方用户。

2: 从资源角度来看。OAuth2.0授权主要是让用户自行决定——“我”在OAuth2.0服务提供方的个人资源是否允许第三方应用访问;而单点登录的资源都在客户端这边,单点登录的服务端主要用于登录,以及管理用户在各个子系统的权限信息。

3: 从流程角度来看。OAuth2.0授权的时候,第三方客户端需要拿预先“商量”好的密码去获取Access Token;而单点登录则不需要。

 来源:SEO技术

单点登录SSO

标签:单点   提升   def   信息   就是   提交   blank   统一   完整   

原文地址:https://www.cnblogs.com/1994july/p/12939621.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!