joh*_*uch 2 node.js passport.js azure-ad-b2c azure-ad-msal passport-azure-ad
我正在尝试使用 Passport.js 和 Azure Active Directory B2C 和 OpenID Connect 策略为我的 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_tokenredirectUrl:这是我在 Azure 中配置的本地主机和端口。allowHttpForRedirectUrl设置为true。(这适用于非生产环境。)isB2C: true小智 5
对于 B2C,您需要设置validateIssuer: false. 对于非公共端点,我们使用从 AAD 返回的元数据中的颁发者,对于 B2C,passport.authenticate 无法issuer从元数据中获取值。对于 B2C,passport 使用 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
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1602 次 |
| 最近记录: |