我正在尝试使用带有OpenID Connect策略的Passport.js和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
的这种格式
您可以尝试this node.js sample,并使用您自己的值,这些值将被调用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
};
关于node.js - 带有Passport.js错误的Azure Active Directory B2C错误“无法获取广告联合元数据”错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60070024/