美文网首页@IT·互联网移动开发应用开发与调优
CAS统一认证中心,针对移动客户端的认证过程设计(APP视角)

CAS统一认证中心,针对移动客户端的认证过程设计(APP视角)

作者: 口子窖 | 来源:发表于2018-06-06 15:50 被阅读183次

    CAS统一认证中心,针对移动客户端的认证过程设计(APP视角)

    • 业务场景

      • 统一认证中心CAS,用员工工号密码登录。
      • 有个通讯录server系统
      • 通讯录APP接入两个服务,即登录接CAS,业务接通讯录server
      • 通讯录APP在用户登录的情况下允许查询其他员工信息
    • 简单例子

      • 通讯录server系统有两个接口,用户信息接口,员工信息查询接口
    • 设计过程(未认证)

      • APP启动调用通讯录server的接口getUserInfo,用来获取当前用户的基本信息。
      • 通讯录server后台发现没有登录,返回报文
      {
          "code": "0030",
          "errorMessage": "未登录",
          "result": null
      }
      
      • APP解析返回报文,code==0030,即跳转native登录页面
      • 登录页面调用cas提供的登录接口
      https://cas.domain.com/login.do?userName=66647&password=12345&jsonView=true&rememberMe=true
      
      userName:工号
      password:密码
      jsonView:是否返回json,因为大多情况下,CAS被设计成支持web鉴权
      rememberMe:是否开启记住会话
      
      • 如果登陆成功,CAS会返回一些cookies
      <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>
      
      • 如果开启了rememberMe,则会多一条cookie
      <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>
      
      • APP重新调用server的getUserInfo接口,如果有机制能自动重掉当然更好,类似于web的302
      • 后台正常返回数据
      • app进入首页
    • 防止恶意破解(认证过程)

      • 调用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
        
    • 设计过程(已认证)

      • APP启动调用server接口getUserInfo
      • 获取得到用户信息
      • 进入首页
    • 持久化会话

      • 保存cookie

        保存name为cas_r_me的cookie,如何保存cookie,具体方法不累赘。

      • logout需要清空保存的cookie

        删除本地缓存的所有cookie,具体方法不累赘。

      • 更新cookie

        在每一次APP启动,获取用户信息接口之后,更新保存的cookie,因为cookie有expiresDate,如果一直用第一次登录的那个,就算每天都登录,迟早会失效,这是我们不希望看到的。

      • 使用cookie

        每次打开app,加载本地保存的cookie到会话管理器,并激活生效。

    相关文章

      网友评论

        本文标题:CAS统一认证中心,针对移动客户端的认证过程设计(APP视角)

        本文链接:https://www.haomeiwen.com/subject/psgbsftx.html