如何验证 javascript 中的 openId id_token

How can I validate an openId id_token in javascript

我正在使用 identityserver v3 to authenticate my users in an angularjs based web application. therefor I request an id_token from the authorize endpoint that returns me what i want (id_token and access_token...). The openid specification 说明 id_token 必须由客户端验证。 我怎样才能在 java 脚本中实现这一点。我可以在 .net 或 java 中找到一些实现,但在 javascript 中找不到任何实现。

有人可以为我提供一个可以在 javascript 中完成这项工作的库吗?

最好的方法是将令牌作为参数并对其进行验证:类似的东西:

 mylib.validate(id_token);

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

这是我所做的:

我们需要使用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 is not defined

您需要引用另一个库。事实上,我发现相关项目 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