首页 > 解决方案 > Azure Active Directory B2C 与 Passport.js 错误“无法获取 aad 联合元数据”错误

问题描述

我正在尝试使用 Passport.js 和带有 OpenID Connect 策略的 Azure Active Directory B2C 为我的 Node.js Web 应用程序实现面向客户的身份验证。

我已按照官方 GitHub 页面上的 README 说明,并研究了官方示例应用程序的源代码,但它们似乎不完整和/或过时,正如在线各种线程所同意的那样。

在拼凑来自网络的各种提示后,我跨越了许多桥梁,但陷入僵局并出现以下错误:

cannot get AAD Federation metadata from endpoint you specified.

AAD 身份验证需要大量配置,所以我会注意一些重要的值:

标签: node.jspassport.jsazure-ad-b2cmsalpassport-azure-ad

解决方案


对于 B2C,您需要设置validateIssuer: false. 对于非通用端点,我们使用从 AAD 返回的元数据中的颁发者,对于 B2C,passport.authenticate 无法issuer从元数据中获取值。对于 B2C,护照使用 TenantId 来处理验证,因此必须提供,这将是identityMetadata.

此外,identityMetadata应该有这种格式:

identityMetadata: "https://" + b2cDomainHost + "/" + tenantIdGuid + "/" + policyName + "/v2.0/.well-known/openid-configuration/"

我认为没有设置护照来处理元数据 url 的这种格式->?p=b2c_1_signin

您可以尝试这个 node.js 示例,并使用您自己的值,这将调用到 passport.js 库。

例子:

var clientID = "93733604-cc77-4a3c-a604-87084dd55348";
var b2cDomainHost = "fabrikamb2c.b2clogin.com";
var tenantIdGuid = "775527ff-9a37-4307-8b3d-cc311f58d925";
var policyName = "B2C_1_SUSI";
var options = {
    identityMetadata: "https://" + b2cDomainHost + "/" + tenantIdGuid + "/" + policyName + "/v2.0/.well-known/openid-configuration/",

    clientID: clientID,
    policyName: policyName,
    isB2C: true,
    validateIssuer: false,
    loggingLevel: 'info',
    loggingNoPII: false,
    passReqToCallback: false
};

推荐阅读