簡體   English   中英

具有OAuth隱式登錄的Thinktecture Identity Server

[英]Thinktecture Identity Server with OAuth Implicit Login

我正在嘗試使用javascript登錄OAuths Client中的身份服務器。 我可以登錄並成功返回到返回網頁。 我遇到一個問題是為什么Thinktecture Identity Sevrer總是返回'#'而不是'?' 在querystring中的參數之前,這是一個錯誤嗎?

另一個問題是當我有access_token時如何獲得使用聲明?

隱式流使用哈希片段而不是查詢字符串-這不是錯誤(請檢查OAuth2規范)。

客戶端不使用OAuth2中的訪問令牌-客戶端不透明-訪問令牌應由后端使用。

我用正則表達式編寫了一個JavaScript函數,以提取“ access_token”參數,如下所示:

    var _access_token = getParameterByName('access_token');        
    function getParameterByName(name) {
        var str = location.hash.substring(1);
        var patt1 = new RegExp(name + "\\s*=\\s*([^&]+)", "g");
        var result = patt1.exec(str);;
        if (result == null)
            return "";
        else
            return result[1];
    }

然后我嘗試使用base64解碼access_token以提取聲明:

    var Claims = base64decode(access_token) 
    function base64decode(input) {
    var output = "";
    var chr1, chr2, chr3;
    var enc1, enc2, enc3, enc4;
    var i = 0;

    input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

    while (i < input.length) {

        enc1 = this._keyStr.indexOf(input.charAt(i++));
        enc2 = this._keyStr.indexOf(input.charAt(i++));
        enc3 = this._keyStr.indexOf(input.charAt(i++));
        enc4 = this._keyStr.indexOf(input.charAt(i++));

        chr1 = (enc1 << 2) | (enc2 >> 4);
        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
        chr3 = ((enc3 & 3) << 6) | enc4;

        output = output + String.fromCharCode(chr1);

        if (enc3 != 64) {
            output = output + String.fromCharCode(chr2);
        }
        if (enc4 != 64) {
            output = output + String.fromCharCode(chr3);
        }

    }

    output = Base64._utf8_decode(output);

    return output;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM