CAS统一认证中心,针对移动客户端的认证过程设计(APP视角)
- - 神刀安全网CAS统一认证中心,针对移动客户端的认证过程设计(APP视角). 统一认证中心CAS,用员工工号密码登录. 有个通讯录server系统. 通讯录APP接入两个服务,即登录接CAS,业务接通讯录server. 通讯录APP在用户登录的情况下允许查询其他员工信息. 通讯录server系统有两个接口,用户信息接口,员工信息查询接口.
业务场景
简单例子
设计过程(未认证)
{ "code": "0030", "errorMessage": "未登录", "result": null }
https://cas.domain.com/login.do?userName=66647&password=12345&jsonView=true&rememberMe=true userName:工号 password:密码 jsonView:是否返回json,因为大多情况下,CAS被设计成支持web鉴权 rememberMe:是否开启记住会话
<NSHTTPCookie version:0 name:TGC value:TGTCF84007422EAD5E7CED12D9658AF05D1716F52B9 expiresDate:'(null)' created:'2018-05-28 12:23:04 +0000' sessionOnly:TRUE domain:cas.domain.com partition:none path:/ids/ isSecure:FALSE isHTTPOnly: YES path:"/ids/" isSecure:FALSE isHTTPOnly: YES>
<NSHTTPCookie version:0 name:cas_r_me value:MTcxMjAwNTFfQlJPV1NFUl8xNTI3NTA2MTQyMDkyXzE1Mjc1MTAxODQ5NzBfMl9iNjgzNTM1N2I5%0D%0AZTZlZGE0NjZjOWI1ODFkMDVmMDAxYw%3D%3D%0D%0A expiresDate:'2018-06-07 11:23:04 +0000' created:'2018-05-28 12:23:04 +0000' sessionOnly:FALSE domain:cas.domain.com partition:none path:/ isSecure:FALSE isHTTPOnly: YES path:"/" isSecure:FALSE isHTTPOnly: YES>
防止恶意破解(认证过程)
调用CAS登陆接口失败多次,服务器一般会锁定当前IP或者其他策略,手段就是让用户人工介入输入动态图形验证码。
CAS会告知,请求需要验证码
{ "needVerifyCode": true, "errorCode": "badVerifyCode", "tgtTimeoutOrKickoff": false, "res_code": 1, "res_message": "errorCode" }
获取验证码,根据”errorCode”: “badVerifyCode”,
https://passport.csdn.net/ajax/verifyhandler.ashx?uuid=xxxxxx
登陆过程改造
https://cas.domain.com/login.do?userName=66647&password=12345&jsonView=true&rememberMe=true&verifyCode=8562&uuid=9DLCN-DL8CL3 userName:工号 password:密码 jsonView:是否返回json,因为大多情况下,CAS被设计成支持web鉴权 rememberMe:是否开启记住会话 verifyCode:验证码,在某些情况下,服务器认为用户恶意尝试登陆,会有保护策略。 uuid:用来确定验证码的uuid 注:如果后台服务端强大,对验证码的管理不是通过uuid,而是通过会话识别对应,那么登录接口就无需uuid,生成图形验证码的时候也无需uuid
设计过程(已认证)
持久化会话
保存cookie
保存name为cas_r_me的cookie,如何保存cookie,具体方法不累赘。
logout需要清空保存的cookie
删除本地缓存的所有cookie,具体方法不累赘。
更新cookie
在每一次APP启动,获取用户信息接口之后,更新保存的cookie,因为cookie有expiresDate,如果一直用第一次登录的那个,就算每天都登录,迟早会失效,这是我们不希望看到的。
使用cookie
每次打开app,加载本地保存的cookie到会话管理器,并激活生效。