我正在尝试使用 javascript 登录到 OAuths 客户端中的身份服务器。我可以登录并成功返回返回网页。我遇到的一个问题是为什么 Thinktecture 身份服务器总是返回 '#' 而不是 '?' 在查询字符串中的参数之前,这是一个错误吗?
另一个问题是当我拥有 access_token 时如何获得使用声明?
我正在尝试使用 javascript 登录到 OAuths 客户端中的身份服务器。我可以登录并成功返回返回网页。我遇到的一个问题是为什么 Thinktecture 身份服务器总是返回 '#' 而不是 '?' 在查询字符串中的参数之前,这是一个错误吗?
另一个问题是当我拥有 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;
}