SSO跟踪

来源:互联网 发布:网络终结者有何用 编辑:程序博客网 时间:2024/06/04 18:25

1 . 用户首次访问应用端,未携带cookie数据. 应用端会让用户重定向到服务器. 
请求:http://192.168.10.110:8080/ITSSSOClient/index.jsp 
重定向:http://192.168.10.110:8080/ITSSSO/SSOAuth?action=preLogin&setCookieURL=http://192.168.10.110:8080/ITSSSOClient/setCookie&gotoURL=http://192.168.10.110:8080/ITSSSOClient/

2.服务器端收到用户的请求,先取得action=preLogin.判断cookie为null,然后转发到login.jsp
用户的浏览器显示服务器端的login.jsp页面
注:服务端代码133行,地址栏上的URL不改变

3.用户填写表单,登录.
    登录时,应用端会生成一个cookie值,用于传递给服务端处理.
    服务器端会获取action=login(来至login页面表单里的action的name)
    并进入doLogin, 读取username和password做校验
    生成一个唯一码进行加密,且服务端将储存用户登录信息(用户名,登录时间,过期时间),并将加密后的cookie信息返回给应用端.

让浏览器将执行:
out.print("<script type='text/javascript'>");
            out.print("document.write(\"<form id='url' method='post' action='" + setCookieURL + "'>\");");
            out.print("document.write(\"<input type='hidden' name='gotoURL' value='" + gotoURL + "' />\");");
            out.print("document.write(\"<input type='hidden' name='ticket' value='" + encodedticketKey + "' />\");");
            out.print("document.write(\"<input type='hidden' name='expiry' value='" + expiry + "' />\");");
            out.print("document.write('</form>');");
            out.print("document.getElementById('url').submit();");
            out.print("</script>");
setCookieURL : http://127.0.0.1:8080/ITSSSOClient/setCookie
gotoURL :http://127.0.0.1:8080/ITSSSOClient/
encodedticketKey :079482AC1F897530ED61D7B0C891A3EFBE2A3A6F2BAA762036E97E9F5415E625AD6A88B4FA37833D
expiry :604800

4.应用端执行setCookie方法,保存服务器端返回的数据参数.
页面跳转到http://127.0.0.1:8080/ITSSSOClient/
此次页面跳转,携带了服务器返回的cookie

5. 应用端拦截跳转链接,进入authCookie方法,填充action值为authTicket.
    携带{{action,authTicket},{SSOID,079482AC1F897530ED61D7B0C891A3EFBE2A3A6F2BAA762036E97E9F5415E625AD6A88B4FA37833D}}信息去访问认证系统=>http://127.0.0.1:8088/ITSSSO/SSOAuth

6.服务端再次接受到应用端的请求,判断action=authTicket,并做相应处理(将步骤5中的SSOID值进行解密判断是否正确)
判断正确:
返回信息:   {"error":false,"username":XXXX}

7.应用端此刻还在authCookie方法中,取得服务端返回的信息(主要是在resp中填充username的值).在http://127.0.0.1:8088/ITSSSOClient/   ,将页面返回给浏览器.(最初请求的页面)

 









0 0
原创粉丝点击