node.js - 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 身份验证需要大量配置,所以我会注意一些重要的值:
policyName
: 这就是b2c_1_signin
,就像我在 Azure 门户中配置的一样。identityMetadata
:我正在使用特定于租户的 v2.0 端点。我添加?p=b2c_1_signin
了注入策略名称。responseType
:id_token
redirectUrl
:这是我在 Azure 中配置的本地主机和端口。allowHttpForRedirectUrl
设置为true
。(这适用于非生产环境。)isB2C
:true
解决方案
对于 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
};
推荐阅读
- android - 完全填满单选按钮的圆圈
- ios - 以编程方式设置约束以使视图全屏
- mysql - MySQL:选择具有特定字段值的多行
- docker - 尝试构建 docker 镜像时出错:无法拨打 gRPC:无法升级到 h2c,收到 500
- flutter - 颤振中带有easy_localization的i18n
- r - 如何在 R 中将 %Y-%M 格式转换为日期
- c# - 如何从字符串中删除枚举?
- bash - 如何在groovy脚本中使用grep,用'和'剪切?
- maven - io.cucumber.core.gherkin.FeatureParserException:无法解析资源
- c# - 分配变量(用于解析列表的foreach循环)