1. 程式人生 > 其它 >頭部傳authorization跨域請求-JWT認證將token新增到Authorization(加Beare字首)

頭部傳authorization跨域請求-JWT認證將token新增到Authorization(加Beare字首)

我的疑問是:為啥 有些token前面要加Beare,並且鍵值對key是authorization

什麼樣的token才能算是bearer token呢?


在以前,使用者進行認證的時候一般是:
-> 使用者向服務端傳送驗證資訊(使用者名稱、密碼)。

-> 服務端驗證成功就向用戶返回一個sessionid,服務端儲存了這個session_id對應的資訊,寫入使用者的 Cookie。

-> 之後前端發出的每一次請求,都會通過Cookie,將session_id傳回服務端,服務端收到session_id,找到對應的資料,由此得知使用者的身份。

但是這種情況下在以下場景下不好實現
比如微博和新浪郵箱都是新浪的。現在要求登陸完新浪郵箱,再訪問微博會自動登入。

這時候可以使用JWT。

JWT的原理是,伺服器認證以後,生成一個JSON物件,發回給使用者,如下所示

{ "data": ".......", "expires": "7730123010203" }

伺服器在生成這個物件的時候加上簽名。

經過一系列加密和簽名演算法之後,JWT變成了這樣的結構的一個具有有效期的字串(是否有效服務端會根據expires判斷)
Base64URL(header).base64UrlEncode(payload).HMACSHA256(Base64URL(header).base64UrlEncode(payload), secret )

這個字串。你可以把它放在Cookie裡面自動傳送,但是這樣不能跨域,所以更好的做法是放在HTTP請求的頭資訊Authorization欄位裡面。

Authorization: Bearer <token>

所以你現在需要去看一下JWT是個啥JWT.IO - JSON Web Tokens Introduction

===================================(手動給前端token加bearer,後端在過濾後驗證)

跨域請求-JWT認證將token新增到Authorization

後端增加程式碼:

header('Access-Control-Allow-Origin:

header('Access-Control-Allow-Headers:Origin,X-Requested-With,Content-Type,Accept,Authorization');

header(
'Access-Control-Allow-Methods:GET,POST'); //CORS跨域 允許Authorization header('Access-Control-Allow-Origin:http://wwww.demo.com'); header('Access-Control-Allow-Headers:Origin,X-Requested-With,Content-Type,Accept,Authorization'); header('Access-Control-Allow-Methods:GET,POST');

前端增加程式碼:

beforeSend: function(xhr) {
        var token = 'xxxxxxxxxx';
        xhr.setRequestHeader("Authorization", "Bearer " + token);

    },

demo示例:

$("#submit").click(function() {
    $("#request-process-patent").html("正在提交資料,請勿關閉當前視窗...");
    $.ajax({
        type: "POST",
        beforeSend: function(xhr) {
            var token = 'xxxxxxxx';
            xhr.setRequestHeader('Authorization', 'Bearer ' + token);        },
        url: "http://www.newweb.com/index.php?act=loginWap&op=login",
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify(GetJsonData()),
        dataType: "json",
        success: function(data) {
            if (data.code == 200) {
                alert('登入成功!');
                window.location.href = "http://www.logindemo.com/backend.html";
            } else {
                alert('使用者名稱或密碼錯誤!');
            }

        },

        error: function(message) {
            $("#request-process-patent").html("使用者名稱或密碼錯誤!");
        }
    });

});

function GetJsonData() {
    var json = {
        "code": $("#code").val(),
        "user_name": $("#user_name").val(),
        "password": $("#password").val()
    };

    return json;

}

轉 :https://www.zhihu.com/question/305585277/answer/551377366

https://blog.csdn.net/weixin_28844235/article/details/112833169