首页 > 其他 > 详细

鉴权和认证服务器

时间:2016-03-04 02:17:11      阅读:245      评论:0      收藏:0      [点我收藏+]

?

目前登录凭证的方式无非两种:?
一个是通过服务器端的session,一个是通过浏览器的cookie.?
简而言之:session和cookie

常规的是通过session?
步骤:?
1,用户在浏览器登录?
2,后台鉴权,若登录成功,则把用户信息写入session,servlet自动生成JSESSIONID 返回浏览器;?
3,浏览器把JSESSIONID 写入cookie?
说明:cookie是浏览器的存储文件,存储的只是JSESSIONID,而不是用户信息;?
JSESSIONID 只是一个钩子,用户信息其实存储在服务器端.

比如我在浏览器登录之后,重新打开一个标签页,输入相同的地址,仍然是登录状态,因为标签页共享cookie.?
也就是说我只要获取到JSESSIONID ,就可以获取用户隐私信息,比如除用户名以外的其他信息(密码,姓名,年龄等).也可以做一些敏感操作,比如修改密码

浏览器发送请求时会带上cookie?
这样服务器端才知道是否登录过:?

bubuko.com,布布扣

例如,我获取到JSESSIONID 之后,使用HTTP模拟发送请求:?

bubuko.com,布布扣

服务器端是如何判断是否登录

/***
     * 判断是否已登录
     *
     * @param user2
     * @return
     */
    public static boolean isLogined(GenericUser user2, String loginFlag) {
        if (ValueWidget.isNullOrEmpty(user2) || ValueWidget.isNullOrEmpty(user2.getUsername())
                || (!Constant2.FLAG_LOGIN_SUCCESS.equalsIgnoreCase(loginFlag))) {
            return false;
        } else {
            return true;
        }
    }

    /***
     * 判断是否已登录
     *
     * @param session
     * @return
     */
    public static boolean isLogined(HttpSession session) {
        String loginFlag = (String) session
                .getAttribute(Constant2.SESSION_KEY_LOGINED_FLAG);
        GenericUser user2 = (GenericUser) session.getAttribute(Constant2.SESSION_KEY_LOGINED_USER);
        return isLogined(user2, loginFlag);
    }

?

如果通过cookie呢?

详细流程,逻辑?
bubuko.com,布布扣
?
(1)登录前,浏览器先向认证服务器请求一个OTP,认证服务器返回OTP,同时返回一个cookie给浏览器;?

(2)认证服务器把OTP 和CCC(cookie) 挂钩;?
(3)登录时连同带上OTP?
(4)若登录成功,则认证服务器返回登录凭证(access token)给应用服务器;?
(5)认证服务器把CCC 和登录凭证挂钩;?
(6)通过CCC 可以判断用户是否有权限.

所以,?
(a)可以通过CCC 获取登录凭证?
(b)也可以通过OTP 获取登录凭证

根本原因:服务器把OTP 和CCC(cookie) 挂钩

那么CCC记在什么地方??
浏览器

?
bubuko.com,布布扣
?

?

参考:http://blog.csdn.net/hw1287789687/article/details/48373209

?

?

鉴权和认证服务器

原文:http://hw1287789687.iteye.com/blog/2280202

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!