登录凭证的方式

简介: <div class="markdown_views"><p>目前登录凭证的方式无非两种: <br>一个是通过服务器端的session,一个是通过浏览器的cookie. <br>简而言之:session和cookie</p><p><strong>常规的是通过session</strong> <br>步骤: <br>1,用户在浏览器登录 <br>2,后台鉴权,若登

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

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

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

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

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

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

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

如果通过cookie呢?

1,登录之前,会向服务器请求一个随机token,同时返回cookie,例如:
CCC=63314c585041e889766fec6657879c; Expires=Mon, 21-Sep-2015 06:48:27 GMT; Path=/
2,登录时带上这个cookie(即CCC=63314c585041e889766fec6657879c)
3,服务器鉴权,登录成功之后,把登录凭证和CCC 绑定,
即服务器可以通过CCC 判断是否登录,也可以通过CCC 获取用户敏感信息.

这样的话,只要登录过,用户不主动清除cookie,那就一直是登录状态.
如果用户主动清除了cookie,那就不是登录状态了
通过cookie

详细流程,逻辑
认证服务器
(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记在什么地方?
浏览器

获取OTP的接口返回:
OTP接口返回

相关文章
|
11天前
|
安全 API 数据安全/隐私保护
凭证管理
凭证管理
27 1
|
11天前
|
云安全 安全 开发工具
如何有效管理你的阿里云凭证?
如何有效管理你的阿里云凭证?
22 3
|
安全 数据安全/隐私保护
阿里云账号开启手机号登录方法
阿里云账号开启手机号验证码登录方法
2098 0
阿里云账号开启手机号登录方法
|
9月前
|
缓存 API 数据库
一行代码教你实现登录鉴权
一行代码教你实现登录鉴权
96 0
|
10月前
|
数据安全/隐私保护
认证服务:注册和登录
认证服务:注册和登录
|
安全 测试技术 API
基于Oauth2.0的第三方账号登录实现
​ 基于 Oauth 2.0 的第三方账号登录实现 Oauth 2.0 原理与授权流程 1.刚开始的第三方应用接入其他账号登录过程: ​ 2.使用oauth改进的原理: ​ 3.使用oauth实现的具
203 1
|
JSON 安全 前端开发
如何认证当前的操作用户?
如何认证当前的操作用户?
|
小程序 API 数据库
小程序中实现用户的登录与注册
小程序中实现用户的登录与注册
小程序中实现用户的登录与注册
|
监控 安全
|
API 开发工具 对象存储
如何限制只有启用了MFA认证的用户才能操作OSS资源?
第一章:用户使用场景介绍   阿里云控制台提供了各个产品相关图形化配置,并且功能比较齐全。对于用户来说,学习成本低、易操作、易上手。因此,绝大多数用户使用主账号登录控制台进行日常的运维管理操作。由于主账号对其名下的所有阿里云资源都拥有完全控制的权限,一旦主账号的登录密码泄露,该账号下的资产将面临极大的损失,甚至有可能被他人恶意使用而造成相关法律风险。