[英]Token validation in WebApp WebApi Authentication using Azure AD?
在WebApp <=> WebApi身份验证方案上工作,在该方案中,我从WebApp中的Azure AD获取JWT令牌,并将其传递给WebApi。 在WebApi中,从WebApp的令牌生成Azure GraphAPI的访问令牌,以调用GraphAPI进行授权。
WebApp和WebApi都在Azure租户门户上注册为单个应用程序,因为WebApp和WebApi的用户身份验证相同。
这是一个Intranet应用程序,并且对AD中的所有用户开放。 与令牌验证或认证有关的几个问题。
由于JWT令牌是经过数字签名和加密的。 从WebApp传递令牌时,如果不在WebApi中进行验证会有什么含义?
请指教。
我们仅使用Audience进行验证(如果您的应用程序不是多租户,则可以使用租户,但是对于我们来说,因为它是多租户,因此我们将“ common”用作租户)。
如果我们不在API中进行受众验证,那么任何获取图形令牌的应用程序都可以调用您的应用程序(唯一会发生的验证是令牌是否过期)。
JWT令牌未加密,它以64为基数编码,您可以使用诸如http://jwt.calebb.net/之类的工具查看令牌中的属性。
经过长时间的尝试,我想出了这个:
需要检索第一个x5c密钥: https ://login.windows.net/common/discovery/keys
然后,安装https://github.com/auth0/node-jsonwebtoken不幸的是,该库不支持证书验证。 您需要将其转换为密钥(私有或公共)。
那么代码将是:
function insertNewlines(certificate) {
for (var i = 64; i < certificate.length; i += 65) {
certificate = certificate.slice(0, i) + '\n' + certificate.slice(i);
}
return certificate;
}
function addBoundaries(certificate) {
return "-----BEGIN CERTIFICATE-----\n" + certificate + "\n-----END CERTIFICATE-----";
}
function getPEM(certificate) {
certificate = insertNewlines(certificate);
certificate = addBoundaries(certificate);
return certificate;
}
let id_token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsI...";
let cert = "MIIDBTCCAe2gAwIBAgIQZSAeaqWig4...";
var pemContent = getPEM(cert);
var jwt = require('jsonwebtoken');
jwt.verify(id_token, pemContent, function(err, decoded) {
//err Invalid signature
// decode - valid data
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.