如何在javascript中验证openId id_token

时间:2015-03-26 07:02:53

标签: angularjs openid thinktecture-ident-server openid-connect

我正在使用identityserver v3在基于angularjs的Web应用程序中验证我的用户。因此,我从授权端点请求一个id_token,它返回我想要的内容(id_token和access_token ...)。 openid specification表示必须由客户端验证id_token。 我怎样才能在javascript中实现这一点。我可以在.net或java中找到一些实现,但是在javascript中找不到任何实现。

有人可以为我提供一个用javascript完成工作的库吗?

最好的方法是将令牌作为参数并验证它:sthg like:

 mylib.validate(id_token);

某个服务器提供端点来验证它,但我真的想在客户端验证它

1 个答案:

答案 0 :(得分:0)

这是我做的:

我们需要使用 JSWS

here : JSJWS下载库。我已经下载了3.0.2版本。

index.html 中的

,您必须引用上面下载的jws-3.0.js,json-sans-eval.js文件 (json-sans-eval位于[jsjws-3.0.2 \ ext]目录中。(更多相关信息可在此处找到) json-sans-eval网站)

如果您运行代码,则会出现以下异常: b64utohex未定义

您需要引用另一个库。事实上,我发现相关项目 jsrsasign 具有所需的库。 你可以在这里下载一个版本:https://github.com/kjur/jsrsasign/tags/ 我下载了4.7.0版本并取出了jsrsasign-4.7.0-all-min.js文件并添加了引用脚本。

现在,您可以使用以下代码完成所有必要的文件:

function validateToken(id_token, cert) {
    var jws = new KJUR.jws.JWS();
    var result = 0;
    result = jws.verifyJWSByPemX509Cert(id_token, cert);
    if (result) {
        result = JSON.parse(jws.parsedJWS.payloadS);
    } else {
        result = 'unable to verify token';
    }
    return result;
}

可以找到here

的长篇故事