![](/img/trans.png)
[英]Thinktecture Identity Server and ASP.NET Open OAuth
[英]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.