繁体   English   中英

使用Azure AD在WebApp WebApi身份验证中进行令牌验证吗?

[英]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中的所有用户开放。 与令牌验证或认证有关的几个问题。

  1. 我是否需要在WebApp和WebApi中的令牌中验证租户和受众群体?
  2. 我还需要在WebApp,WebApi或两者中执行哪些其他令牌验证?

由于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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM