具有OAuth隐式登录的Thinktecture标识服务器

具有OAuth隐式登录的Thinktecture标识服务器,oauth,thinktecture-ident-server,Oauth,Thinktecture Ident Server,我正在尝试使用javascript登录到OAuth客户端中的identity server。我可以成功登录并返回到返回网页。 我遇到的一个问题是,为什么ThinkStructure identity sevrer总是在querystring中的参数之前不返回“?”,这是一个bug吗 另一个问题是,当我拥有访问令牌时,如何获取uses声明?隐式流使用哈希片段而不是查询字符串-这不是错误检查OAuth2规范 客户端不使用OAuth2中的访问令牌-它对客户端是不透明的-访问令牌将由后端使用。我编写了一

我正在尝试使用javascript登录到OAuth客户端中的identity server。我可以成功登录并返回到返回网页。 我遇到的一个问题是,为什么ThinkStructure identity sevrer总是在querystring中的参数之前不返回“?”,这是一个bug吗


另一个问题是,当我拥有访问令牌时,如何获取uses声明?

隐式流使用哈希片段而不是查询字符串-这不是错误检查OAuth2规范


客户端不使用OAuth2中的访问令牌-它对客户端是不透明的-访问令牌将由后端使用。

我编写了一个带有正则表达式的javascript函数来提取访问令牌参数,如下所示:

    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_令牌进行解码,以提取声明:

    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;

}

现在我可以用javascript中的location.hash.substring1提取access_令牌参数。那么,如果我已经登录,我是否可以从Identity server获得用户声明?我误读了我的答案-客户端不应该使用令牌。您无法验证其上的签名。将其发送到您的API后端以进行验证-然后它可以将已验证的声明发送回您。您是否可以给我提供更多信息,以确定我可以将哪个API发送到identity server以验证此访问令牌?谢谢。您应该在后端验证令牌-而不是在identity server中-这是访问令牌的全部要点。明白了,但是有什么算法可以在后端实现吗?