ucenter后台登录流程
2016-12-20 14:24:59 0 举报
后台登录流程
作者其他创作
大纲/内容
触发IQTOAuthListener的登录失败事件(空方法)
判断是不是httpapi请求,这个的判断根据启动参数配置的http_api_prefix的url格式判断(ucenter中未配置这个信息,实际并不起作用),这种json返回错误码之类的然后结束不再往下执行
跳转到redirect_uri?access_token=accesstoken的值这个地址是配置的登录后跳转地址。结束。重走上面过程。
进入LoginController login方法。设置cookie(名为appFrom,值为空);获取传入的所有参数,如果没有使用启动配置再创建一次这些参数;增加oauthLoginUrl参数这个值在/configs/ucenter/ucenter/common/oauthLoginUrl(http://localhost:8885)是8885端口为uww;
将用户信息放到线程变量中表示当前登录用户(com.qtone.open.service.ucm.context.UserContext)这个context主要在controller中用
有第三方
执行url跳转。loginUrl?client_id=&client_secret=&redirect_uri=&scope=read&grant_type=password&product&appKey这里loginurl是http://localhost:8087/login这个是ucw的登录地址
http调用/v2/uic/account根据token获取用户信息
验证分两种情况,一种是提供了第三方token处理机制UserContextProvider这个接口实现;另一种是ucenter自己的接口
callWhenAuthenticatiornError
callWhenAuthenticatornSuccess
第三方校验token有效。若校验无效再使用ucenter的校验
调用启动参数中validateTokenUrl进行校验https://uww-dev.qtonecloud.cn/v2/checkToken
否
是
http://localhost:8087/login?product=ucenter&scope=read&client_secret=ucenter&grant_type=password&redirect_uri=http%3A%2F%2Flocalhost%3A8087%2Fadmin%2Fucm%2Findex&client_id=ucenter&appKey=ucenter
使用ajax跳转到uww的获取oauth的accesstoken(此处使用密码方式可以直接获得token)用ajax有问题(后来发现ajax此处可以跨域),uww和ucw可能在不能的域名下(当前是一个域名所以没问题)。ajax请求成功后获得accesstoken,并把accesstoken设置到cookie中,并把appFrom的cookie删掉(这个cookie不知道干嘛)。accesstoken的cookie的时间是30天(这个时间和token后台时间应该有关系,但此处未处理)
判断是logout则进行logout;判断是否要认证,不需要认证直接结束;否则进行认证;认证完调用callWhenAuthenticatornSuccess;中间有异常调用callWhenAuthenticatiornError
这里看到每次请求过来不管是否登录过都会校验一次token(发起http)
验证token过程
将用户id作为IUserContext的属性放到线程变量中(这个为什么?直接使用上面用户信息就可以了啊)
同样委托给spring/admin/*QTOAuthFilter
参数或cookie中获取token。根据token获取用户并设置到当前线程;然后触发IQTOAuthListener登录成功
token是空,验证失败
http://localhost:8885/v2/oauth/token?client_id=ucenter&client_secret=ucenter&grant_type=password&scope=read&username=tanghc&password=d848458846ab23994b38fbc0f9ecb1ad&plainPassword=dGFuZ2hjMTIz&product=ucenter&appKey=ucenter
跟验证token一样,判断第三方,第三方取不到使用ucenter自己接口
认证过程在QTOAAuthenticator
request参数获取access_token,如果有则validateToken如果通过则把token放到cookie中;如果request中没有access_token从cookie中读取access_token,如果有进行validateToken。验证成功通过,失败则异常
实现了com.qtone.open.ucm.filter.DelegableSecurityFilter执行清除线程当前用户,设置cookie跨域,调用Authenticator认证
QTOAAuthenticator继承了Authenticator
先看是不是ajax请求,如果是使用json返回(直接把错误信息返回出去),然后继续执行后面(这地方有问题,应该立刻结束不能继续执行,否则会出现response关闭的问题)
cookie或参数中是否获得accesstoken
第三方校验无效
触发IQTOAuthListener的登录成功事件将用户信息再放到cn.thinkjoy.common.utils.UserContext中。这个context在controller和service中都会用(后来发现这个Context是可以在mu里用到的)
获取用户过程
0 条评论
下一页