我想在 NodeJS 中实现 Microsoft Azure AD B2C 的 SSO 注册/登录,但是我想使用 Graph API 创建用户。我正在使用
passport-azure-ad
策略。该过程必须是自定义的,因为要根据用户的信息生成二维码。所以我只需要用户对象和令牌。
我的护照策略是这样的:
ssoOptions = {
identityMetadata: `https://${this.TENANT_NAME}.b2clogin.com/${this.TENANT_NAME}/${this.VERSION}/.well-known/openid-configuration`,
clientID: this.CLIENT_ID_B2C,
responseMode: 'form_post',
responseType: 'code id_token',
redirectUrl: this.REDIRECT_URI,
validateIssuer: false,
passReqToCallback: true,
scope: ['openid', 'profile', 'email']
}
passport.use('sso-oidc', new OIDCStrategy(ssoOptions,
(iss: any, sub: any, profile: any, accessToken: any, refreshToken: any, done: any) => {
if (!profile.oid) {
return done (new Error("No oid found for the user"), null);
}
const userProfile = {
oid: profile.oid,
displayName: profile.displayName,
email: profile.email,
accessToken,
}
console.log('USER PROFILE', userProfile);
return done(null, userProfile);
}))
在我的 Azure AD B2C 应用程序清单中,我有以下内容:
"signInAudience": "AzureADandPersonalMicrosoftAccount",
AADSTS50020: User account '[email protected]' from identity provider 'live.com' does not exist in tenant 'AppName' and cannot access the application '123123'(AppName) in that tenant. The account needs to be added as an external user in the tenant first. Sign out and sign in again with a different Azure Active Directory user account
我的邮递员选项如下所示:
Auth URL
https://login.microsoftonline.com/AppName.onmicrosoft.com/oauth2/v2.0/authorize
Access Token URL
https://login.microsoftonline.com/AppName.onmicrosoft.com/oauth2/v2.0/token
Callback URL
https://localhost:3000/
ClientID: someID
ClientSecret: someSecret
scope: openid profile email
经过一些修改,我现在可以从 Postman 获取 access_token: 我的身份验证 URL 现在是这样的:
https://appName.b2clogin.com/appName.onmicrosoft.com/B2C_policy_name/oauth2/v2.0/authorize
但是,我不知道接下来该怎么办。基本上,我想使用 graphAPI 创建用户(如果不存在)并更新 azure id 等(如果存在)。
您面临的错误是因为您传递了无效的身份验证 URL 和访问令牌 URL。
要解决该错误,您需要传递有效的身份验证 URL 和访问令牌 URL,如下所示:
验证网址:
https://infrab2c.b2clogin.com/infrab2c.onmicrosoft.com/<policy-name>/oauth2/v2.0/authorize
访问令牌 URL :
https://infrab2c.b2clogin.com/infrab2c.onmicrosoft.com/<policy-name>/oauth2/v2.0/token
创建了 Azure AD B2C 应用程序:
生成代币:
Auth URL : https://TenantName.b2clogin.com/TenantName.onmicrosoft.com/B2C_1_testruk/oauth2/v2.0/authorize
Token URL: https://TenantName.b2clogin.com/TenantName.onmicrosoft.com/B2C_1_testruk/oauth2/v2.0/token
Callback URL: Redirect URL
Client ID: xxx
Client Secret: xxx
Scope: openid profile email
注意:只会生成 ID 令牌,要在 Azure AD B2C 中生成访问令牌,您需要传递适用于应用程序的范围。