面试题首页 > Java权限管理框架面试题

单点登录面试题

001什么是单点登录?

单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案 之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

002单点登录系统,如果cookie禁用,你们怎么解决?

如果禁用cookie可以使用url中带参数,把token传递给服务端。当然此方法涉及安全性问题,其实在cookie中保存token同样存在安全性问题。推荐使用sso框架CAS实现单点登录。

003SSO原理(单点登录的过程)

以登录天猫为例进行说明:
1)当⽤户第⼀次访问淘宝的时候,因为还没有登录,会被引导到认证中⼼进⾏登录。
2)根据⽤户提供的登录信息,认证系统进⾏身份验证,如果通过,则登录成功,并返回给⽤户⼀个认证的凭据(JWT token)。
3)当⽤户访问天猫时,就会将这个 JWT token 带上,作为⾃⼰认证的凭据。
4)应⽤系统接收到请求后会把 JWT token 送到认证中⼼进⾏校验。
5)如果通过校验,⽤户就可以在不⽤再次登录的情况下访问天猫了。

004SSO如何实现?

1)代理登录(agent):用于无法改造的旧系统;
2)令牌环(token):通过Cookie共享令牌环的方式传递当前用户信息,实现SSO,存在跨域问题;
3)身份票据(ticket):除了增加一台信任验证服务器,完全满足了存储信任,验证信任,作用范围和安全性的问题,也是适用最广的webSSO实现方式

005什么是CAS?

CAS框架:CAS(Central Authentication Service,即:统一认证服务)是实现SSO单点登录的框架。CAS分为两部分,CAS Server和CAS Client。
CAS Server用来负责用户的认证工作,就像是把第一次登录用户的一个标识存在这里,以便此用户在其他系统登录时验证其需不需要再次登录。
CAS Client就是我们自己开发的应用程序,需要接入CAS Server端。当用户访问我们的应用时,首先需要重定向到CAS Server端进行验证,要是原来登陆过,就免去登录,重定向到下游系统,否则进行用户名密码登陆操作。

006CAS中3个术语?

Ticket Granting ticket (TGT) :可以认为是CAS Server根据用户名密码生成的一张票,存在Server端
Ticket-granting cookie (TGC) :其实就是一个Cookie,存放用户身份信息,由Server发给Client端
Service ticket (ST) :由TGT生成的一次性票据,用于验证,只能用一次。相当于Server发给Client一张票,然后Client拿着这个票再来找Server验证,看看是不是Server签发的。

007CAS处理流程?

1)用户访问网站,第一次来,重定向到 CAS Server,发现没有cookie,所以再重定向到CAS Server端的登录页面,并且URL带有网站地址,便于认证成功后跳转,形如 http ?/cas-server:8100/login?service=http ?/localhost:8081
注意:service后面这个地址就是登录成功后要重定向的下游系统URL。
2)在登陆页面输入用户名密码认证,认证成功后cas-server生成TGT,再用TGT生成一个ST。 然后再第三次重定向并返回ST和cookie(TGC)到浏览器
3)浏览器带着ST再访问想要访问的地址:
http ?/localhost:8081/?ticket=ST-25939-sqbDVZcuSvrvBC6MQlg5
注意:ticket后面那一串就是ST
4)浏览器的服务器收到ST后再去cas-server验证一下是否为自己签发的,验证通过后就会显示页面信息,也就是重定向到第1步service后面的那个URL
首次登陆完毕。
5)再登陆另一个接入CAS的网站,重定向到CAS Server,server判断是第一次来(但是此时有TGC,也就是cookie,所以不用去登陆页面了),但此时没有ST,去cas-server申请一个于是重定向到cas-server,形如:http: //cas-server:8100/login?service=http ?/localhost:8082 && TGC(cookie) (传目标地址和cookie)
6)cas-server生成了ST后重定向给浏览器http ?/localhost:8082/?ticket=ST-25939-sqfsafgefesaedswqqw5-xxxx
7)浏览器的服务器收到ST后再去cas-server验证一下是否为自己签发的,验证通过后就会显示页面信息(同第4步)

008什么是Token?

Token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。
当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码。
简单Token的组成;uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token的前几位以哈希算法压缩成的一定长度的十六进制字符串。为防止token泄露)。

009OAuth是什么?

OAuth 是一个行业的标准授权协议,主要用来授权第三方应用获取有限的权限。实际上它就是一种授权机制,最终目的是为第三方应用颁发一个有时效性令牌 token,使得第三方应用能够通过该令牌获取相关的资源。
OAuth 2.0 比较常用的场景就是第三方登录,当你的网站接入了第三方登录时一般就是使用的 OAuth 2.0 协议。
现在OAuth 2.0也常见于支付场景(微信支付、支付宝支付)和开发平台(微信开放平台、阿里开放平台等等)。

010介绍下Access Token ?

Access Token 是在 Oauth2.0 协议中,客户端访问资源服务器时需要带上的令牌(其实就是一段全局唯一的随机字符串)。拥有这个令牌代表着得到用户的授权。令牌里面包含哪个用户 在什么时候 授权给哪个app去做什么事情。当然这些信息是不能直接从Access Token 看出来的,而是存在平台方的数据库中,平台可以用Access Token 作为 key 去查询出这些信息,然后验证调用方是否有权限。

011介绍下Refresh Token?

Refresh Token是专用于刷新 Access Token 的 token。如果没有Refresh Token,也可以刷新 Access Token,但每次刷新都要用户输入登录用户名与密码。有了 Refresh Token,客户端直接用Refresh Token 去更新Access Token,无需用户进行额外的操作。

012介绍下JWT?

Json Web Token (JWT)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。该token被设计为紧凑且安全,特别适用于分布式站点单点登录场景。
JWT由头部(header)、载荷(payload)、签证(signature) 三部分组成。

目录

返回顶部