ucenter后台单点登录
2017-09-11 16:03:47 0 举报
ucenter后台登录
作者其他创作
大纲/内容
Authenticator是abstractor定义模板,各自业务根据需要实现
没有权限则登录失败,有权限继续。创建一个EmbedToken,类型是embed_token,嵌入类型是Access_token(这个不懂),将userid作为token的额外属性放到token中
根据用户名密码获取用户;获取不到使用ldap获取用户;获取不到则返回登录失败
得到tokenresolver
同ajax拼接from,appkey,product,username,然后增加error参数值为exception获取的,增加log参数,值是把异常栈串起来。拼接redirect_url进行跳转
ucw
访问cmc
Authenticator捕获到异常,进行跳转
又走一遍上面一串
再次回到Authenticator;包装Baserequest;tokenresolver处理token(这次cookie中有accesstoken了,因此会在accesstokenresolver中读到token,放到Baserequest中);根据token类型获得accesstokenresolver进行invoke(取出accesstoken;创建Principal并设置token属性;校验token中用户,从token中取出userid,从userstore中取出user,看是否存在,并将user设置到principal中;principal设置到Baserequest中;检验credentials,根据user-agent生成key,根据key从cookie中取出secret,比较secret与token中secret,不通过异常,通过则把credentials放到Baserequest中)
上面执行完invoke回到Authenticator,没有异常因此调用invokehandler的callWhenAuthenticationSuccess,这时候还是EmbedTokenHandler;方法中获取requesturi跳转(这地方应该是想把之前传入的token去掉然后跳转,此处没有考虑url带参数情况);Baserequest把之前的EmbedToken清除掉;返回结束。浏览器跳转。
根据传入的from,后面拼接iauth-embed-token参数value为token的值返回到页面login2.ftl(这里是ajax请求;这里没有设置cookie以及登录信息因此没有实现单点)
进入ucw的login2.ftl
delegatingSecurityFilter过滤/admin/*委托给spring的DelegatingFilterProxy
执行invoke
浏览器
继续调用跳转(这里有问题,如果还ajax会两次写出)。上面ajax情况该直接结束
调回最早访问的cmc地址;浏览器种上cookie(accesstoken 和credential)
根据token的type获取到tokenhandler(AccessTokenHandler),进行嵌入embed操作。获得EmbedToken;读取额外信息(之前token中额外信息设置的是userid);根据userid到userstore中读取用户信息;创建AccessToken,并存储到tokenstore中;将token设置到cookie中iauth-access-token;将AccessToken作为嵌入token放到EmbedToken中(注意这时候Baserequest中token还没改);生成生成credential相关信息并埋点(通过请求user-agent生成key,和随机secret作为credentials对象,并把key和secrete设置到cookie;将secret设置到AccessToken中用于以后校验)
提交到ucw login/do
根据token的type获取到tokenhandler,因为token是embed_token的类型;使用EmbedTokenHandler进行认证invoke;invoke中先获得token(EmbedToken),调用Authenticator进行嵌入embedment操作(传入的token的嵌入token类型,这里传入的是Access_token)
继承DelegableSecurityFilter(实现Filter接口)dofilter中将认证调用cn.thinkjoy.common.managerui.iauth.core.Authenticator进行认证
创建Baserequest;tokenresolver进行验证,这时候在获取token的时候就能获得到了,实在第二个tokenhandler(EmbedTokenHandler)中获得到url中的token,并从tokenstore中可以读到token,读到token立刻就从tokenstore中删掉token了,并把token返回;获得token之后就放到Baserequest中
如果不是管理员,调用cmc根据appkey和product获取到产品应用的权限码,调用用户的userdimension判断是否有权限
调用tokenstore将token存起来 key为token的值,value为token对象;调用userstore把用户存起来,key为userid,value为user对象
标题
ajax
用户输入用户名密码
回到Authenticator;invoke执行完继续accesstokenhandler的callWhenAuthenticationSuccess,这里只把token从Baserequest中清掉;继续Authenticator,判断是不是logout,是logout清理cookie、token等,否则调用执行成功后的设置(从Baserequest取出principle,取出其中的owner设置到当前现成作为登录用户;设置analytics filter用的context;把token和用户id设置到request的attribute中iauth-access-token,iauth-user-key;将accestoken和user在toeknstore和userstore中延期);整体结束跳到下一个filter
后台单点登录
获取参数Username,Password,From,AppKey,Product和RememberMe(这个参数没用)
判断是否认证(debug情况不认证)
获取请求的url作为from;从meta中获取应用和产品线作为appKey和product;如果传递过用户名作为username,将以上参数使用urlencoding编码拼接到redirect_url后面。redirect_url是通过ucm/common/uhost获取的zk配置(https://ucw-dev.qtonecloud.cn/login/admin),以json方式写出
cmc
delegatingSecurityFilter配置在mu项目中spring-iauth.xml指向了cn.thinkjoy.common.managerui.iauth.client.filter.EasyAuthSecurityFilter
获得Baserequest
login2.ftl根据返回的结果如果成功,则使用上面from拼接的url进行跳转,如果失败提示登录失败。成功调回到cmc
cmc刚开始访问的url
因无token抛异常提示未登陆
0 条评论
下一页