浅谈Token的理解与机制运用

一、定义概念

           Token被翻译成为('令牌','标记')在计算机中的含义也差不错('计算机身份认证安全令牌'),token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。


二、传统的Seeion验证

           Http协议进行数据的提交,服务器接收到用户帐号和密码进行验证,在之后的一系列操作,因为http协议本身是一种无状态的协议,再下一次请求必须重新发送一次帐号和密码来进行认证。

          根据http协议我们没办法做一个长期的验证,为了让应用能够识别身份,我们需要在服务端进行身份的保存,所以使用session进行保存,这就是传统的session认证。

       缺点:session保存是使用的内存,当用户量大的时候会对服务器增加很大的压力。


三、Token解决的问题

    1.Token完全由应用管理,所以它可以避开同源策略.

     2.Token可以避免CSRF攻击(跨域请求仿造).

     3.Token可以是无状态的,可以在多个服务间共享.

          Token是在服务端产生的,如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么服务端会反返回Token给前端,前端可以在每次请求的时候带上Token证明自己的合法地位,如果这个Token在服务端持久化(比如存入数据库),那它就是一个永久的身份令牌.


四、基于Token的身份验证过程

          1、用户通过用户名和密码发送请求请求登录

          2、程序验证用户名和密码

          3、创建一个签名的Token返回给客户端

          4.、客户端每次发送请求且携带Token

          5、服务端验证Token

          6、返回状态码


五、Token的分类

          1、访问令牌(Access Tokens)是Windows操作系统安全性的一个概念。一个访问令牌包含了此登陆会话的安全信息。

          2、会话令牌(Session token)用于解决表单重复提交问题;当客户端提交一次之后(也提交了token并且匹配服务器token)服务器接受成功以后将更新token所以客户端再次提交token将不再匹配


六、使用无状态的Token的时候,有两点需要注意:

        1、Referesh Token有效时间较长,所以它应该在服务器端有状态,以增强安全性,确保用户注销时可控.

         2、应该考虑使用二次认证来增强敏感操作的安全性.

注意:这是  --- 认证服务和业务服务集成在一起的情况


七、分离认证服务

         当Token无状态之后,单点登录就变得容易了,前端拿到一个有效的Token,他就可以在任何同一体系的服务上认证通过------------只要他们使用同样的秘钥和算法来认证Token的有效性.

当然,如果 Token 过期了,前端仍然需要去认证服务更新 Token:

注意:这是建立在认证服务器信任业务服务器的前提下,因为认证服务器产生 Token 的密钥和业务服务器认证 Token 的密钥和算法相同。换句话说,业务服务器同样可以创建有效的 Token。


八、Token的创建

webapi接口token定义:

public string GetToken(){

    string token=md5('control'+'action'+'自定义密钥');

    return token;

}

九、Token的 获取

          方式一:从cookies获取

/**
 *     从Cookies中获取token
 * */
function getToken(){
    var strcookie = document.cookie;//获取cookie字符串
    var arrcookie = strcookie.split("; ");//分割
    //遍历匹配
    for ( var i = 0; i < arrcookie.length; i++) {
        var arr = arrcookie[i].split("=");
        if (arr[0] == "token"){
            return arr[1];
        }
    }
    return "";
} 

         方式二:从Url获取

/**
 *     从Url中获取token
 */
function getTokenByUrl(){
	var token = GetQueryString("token");
	return token;
} 
 
//获取url参数
function GetQueryString(name){
    var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
    var r = window.location.search.substr(1).match(reg);
    if(r!=null)return  unescape(r[2]); return null;
}

注意:https://blog.csdn.net/qq_34825875/article/details/79569579     (在vue中如何获取token,并将token写进header)


十、Token的使用

           方式一:将token放入请求头

$.ajax({

    type: "POST",

    headers: {

        Accept: "application/json; charset=utf-8",

        userToken: "" + userToken

    },

    url: "localhost/api/Home/GetString",

    data: mydata,

    contentType: "application/json",

    dataType: "json",

    success:function(data){

         //  请求成功

    }

});

 

           方式二:在请求之前设置request请求头

$.ajax({

    type: "POST",

    url: "/index",

    data: mydata,

    contentType: "application/json",

    dataType: "json",

    beforeSend: function(request) {                

               request.setRequestHeader("Authorization", token);

    },

    success: function(data) {

           alert(data.msg);

    }

}); 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值