使用 Passport-azure-ad 且不使用 msal 来实施 Microsoft SSO

问题描述 投票:0回答:1

我想在 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",
  1. 在 Postman 中测试 OAuth2 流程时,我看到 Microsoft SSO 屏幕,当我输入我的凭据时,它显示:
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
  1. 我还想在 SSO 屏幕中看到登录和注册,现在我只看到登录并收到上述错误。

我的邮递员选项如下所示:

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 等(如果存在)。

node.js azure microsoft-graph-api single-sign-on passport.js
1个回答
0
投票

您面临的错误是因为您传递了无效的身份验证 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 应用程序

enter image description here

生成代币:

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

enter image description here

enter image description here

注意:只会生成 ID 令牌,要在 Azure AD B2C 中生成访问令牌,您需要传递适用于应用程序的范围。

© www.soinside.com 2019 - 2024. All rights reserved.