token的含义1.serviceToken:用户要有某个service服务登录的权限。2.passToken:证明用户在passport登录过,用于使用passport其他接口3.authToken:passport和service的认证。用于callback到sts时,验证是否为真实请求
输入用户名 密码
小米单点登录文档: http://passport.d.xiaomi.net/doc/sso/%E6%80%8E%E4%B9%88%E6%A0%B7%E6%8E%A5%E5%85%A5SSO.html
server(包括stsservlet)
用户登录页面用户输入登录信息
MiAccountStsServlet
loginUserCache
init()service()
save cookieuserIdcUserId 加密的userIdopen-api-dev_serviceTokenopen-api-dev_slhSet-Cookie:cUserId=vDivVVy7q2lloQaeURvi071s7eA; domain=.36.101; path=/Set-Cookie:open-api-dev_serviceToken=XSANg5HUuSEX6inNa1nR5+DE/+qJbGq1uVIUjPIapr1DP+nRI+/uJ8Z3P5c4sxv9NZtKA3sFI/a0OAc1x8/fE3SOmHK6GR2NtdnVi67XlKQ=; domain=xiaomi.com; path=/Set-Cookie:open-api-dev_serviceToken=XSANg5HUuSEX6inNa1nR5+DE/+qJbGq1uVIUjPIapr1DP+nRI+/uJ8Z3P5c4sxv9NZtKA3sFI/a0OAc1x8/fE3SOmHK6GR2NtdnVi67XlKQ=; path=/Set-Cookie:cUserId=vDivVVy7q2lloQaeURvi071s7eA; path=/Set-Cookie:userId=100008068; path=/Set-Cookie:open-api-dev_slh=W5wQq+2yrav/G11uVFAJU4Vagn8=; domain=.36.101; path=/
LoginRequired
注解:标注该注解的类或方法需要登录验证
302 redirect
http://10.237.36.101:8004/login?follow_up=http%3a%2f%2f10.237.36.101%3a8004
HttpServlet
+ attribute1:type = defaultValue+ attribute2:type- attribute3:type
client
登录验证
登录验证详细流程
http://account.preview.n.xiaomi.net/pass/serviceLogin?callback=http%3A%2F%2F10.237.36.101%3A8004%2Fsts%3Fsign%3DP1GZDGB9cHQcrxwbbQwS9bG7vx8%253D%26followup%3Dhttp%253A%252F%252F10.237.36.101%253A8004&sid=open-api-dev
参数:callbacksign:防止followup被篡改followupsid通过 STSHellper 构造
http://10.237.36.101:8004/login?follow_up=http%3a%2f%2f10.237.36.101%3a8004follow_up:在哪个页面登录的,就应该跳转回哪个页面整个流程中followup永远跟随三个实体:client server passport
MiAccountPassportFilter
authcRequireUrls 需要做登录验证的urls
initdoFilter
任何需要登录的页面 都会判断是否有serviceToken
PaServiceConfiguration
pss 配置参数实体
passportLoginUrlserviceSchemeserviceUrlsid
LoginRequiredUrlScanner
scanPackages
filterAuthcUrls 查找需要登录验证的所有urls
request参数:signfollowuppwdusrauth:用户加密信息,解密后包括 userId timestamp ssecurity nonc score mask_ssign
serviceToken 用于之后的已登录验证userId 用于之后获取userId
302 redirectpass 会让client调用callback地址
请求followup
STSHellper.saveCookieAfterValidate保存cookie
response.sendRedirect(redirectUrl);浏览器跳转
passport.propassport.login.url account地址service.url callback地址
passport
tokenHelper.checkAuthToken(authToken)解密auth信息
pss server 会跳转到callback地址10.237.36.101:8004/sts
MiAccountLoginServlet重定向到account
生成servcieToken种cookie302 redirect followup
http://10.237.36.101:8004/login?follow_up=http%3a%2f%2f10.237.36.101%3a8004登录成功后跳转到10.237.36.101:8004
http://open.preview.be.mi.com:8004/sts?userId pwd followup 等
STSHellper
生成accountUrl
genPassportLoginUrl
STSHellper.genPassportLoginUrl构造callback并加/sts 后缀
登录验证粗略流程
其他关键参数callback:sts回调地址,用于统一登录后的跳转。stsServlet:会进行参数认证并植入cookie