通过 Microsoft SSO 在 Azure AD B2C 中创建用户

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

我有一个 Microsoft SSO 流程,我可以在响应中获取用户所需的信息。目前,我正在通过调用 GraphAPI 创建普通用户并且它可以工作。

以下是创建用户时主体的样子:

        const user = {
            displayName: name,
            identities: [
                {
                    signInType: "userName",
                    issuer: `${this.TENANT_NAME}`,
                    issuerAssignedId: name,
                },
                {
                    signInType: "emailAddress",
                    issuer: `${this.TENANT_NAME}`,
                    issuerAssignedId: email,
                },
            ],
            userPrincipalName: `${secret}@${this.TENANT_NAME}`,
            mail: email,
            passwordProfile: {
                password: password,
                forceChangePasswordNextSignIn: false,
            },
            passwordPolicies: "DisablePasswordExpiration",
        };

注意: 当我执行用户设置自己密码的正常电子邮件注册过程时,上述代码有效。

现在我正在尝试使用从 Microsoft SSO 获得的信息创建一个。现在,我认为我应该删除

passwordProfile
passwordPolicies
,但这不起作用,我在 Graph API 上得到了
400: Bad Request

我尝试将用户对象更改为:

        const user = {
            displayName: name,
            identities: [
                {
                    signInType: "userName",
                    issuer: `${this.TENANT_NAME}`,
                    issuerAssignedId: name,
                },
                {
                    signInType: "emailAddress",
                    issuer: `${this.TENANT_NAME}`,
                    issuerAssignedId: email,
                },
            ],
            userPrincipalName: `${secret}@${this.TENANT_NAME}`,
            mail: email,
            accountEnabled: true, //removed passwordProfile and passwordPolicies and put accountEnabled: true
        };

这只是给了我一个

400: Bad Request
。该错误也不包含太多信息。

也许我在这里遗漏了一些东西。我需要对政策/权限或此处执行某些操作吗? 从 Microsoft SSO 响应中,我获得了电子邮件、oid 和姓名。

我有两个问题:

  1. 鉴于我的用户信息是从 Microsoft SSO 获取的,因此没有密码,如何使用 Graph API 在我的 azure AD B2C 中创建用户?

  2. 如何协调从图形 API 创建用户后获得的 azureId 和从已创建帐户的 Microsoft SSO 获得的 oid?

对于 Graph API,我得到这样的访问令牌:

    async getAccessToken(): Promise<any> {
        try {
            const response = await this.CREDENTIAL.getToken(
                "https://graph.microsoft.com/.default"
            );



            return response.token;
        } catch (error) {
            console.error("Error obtaining access token:", error);
        }
    }

然后用它来调用图形 API,如下所示:

            const response = await axios.post(
                "https://graph.microsoft.com/v1.0/users",
                user,
                {
                    headers: {
                        Authorization: `Bearer ${accessToken}`,
                        "Content-Type": "application/json",
                    },
                }
            );
            console.log(response.data);
            return response.data;
azure azure-active-directory microsoft-graph-api azure-ad-b2c azure-ad-graph-api
1个回答
0
投票

注意:必须传递密码才能在 Azure AD B2C 租户中创建新用户。

  • 如果
    passwordProfile
    未通过,那么您最终可能会遇到错误:
POST https://graph.microsoft.com/v1.0/users

{
"displayName": "[email protected]",
"identities": [
{
"signInType": "userName",
"issuer": "b2c.onmicrosoft.com",
"issuerAssignedId": "user"
},
{
"signInType": "emailAddress",
"issuer": "b2c.onmicrosoft.com",
"issuerAssignedId": "[email protected]"
}
],
"userPrincipalName": "[email protected]",
"mail": "[email protected]",
"accountEnabled": true
}

enter image description here

因此,要在 Azure AD B2C 中创建新用户,您必须通过

passwordProfile
强制要求。

因此请使用您提到的代码:

const user = {
            displayName: name,
            identities: [
                {
                    signInType: "userName",
                    issuer: `${this.TENANT_NAME}`,
                    issuerAssignedId: name,
                },
                {
                    signInType: "emailAddress",
                    issuer: `${this.TENANT_NAME}`,
                    issuerAssignedId: email,
                },
            ],
            userPrincipalName: `${secret}@${this.TENANT_NAME}`,
            mail: email,
            passwordProfile: {
                password: password,
                forceChangePasswordNextSignIn: false,
            },
            passwordPolicies: "DisablePasswordExpiration",
        };

当您通过 Microsoft Graph API 在 Azure AD B2C 中创建用户时,* API 响应中的

id
字段和 SSO 响应中的
oid
是不同但相关的值。

  • Microsoft SSO 中的
    oid
    是 Azure AD 或联合身份提供商中用户的唯一标识符,用于登录或联合目的。
  • Microsoft SSO 中的
    oid
    是用户在外部身份提供商中的唯一标识符,您无法传递此
    oid
    在 Azure AD B2C 租户中创建用户。
  • 图形 API 响应中的
    id
    Azure AD 对象 ID,用于唯一标识 Azure AD B2C 租户中的用户。
当您在 Microsoft Graph API 请求中传递来自 Microsoft SSO

oid
时,您将收到 400
 错误请求,因为用户不在 Azure AD B2C 租户中。

因此,要针对用户执行任何操作,您必须传递来自 Graph API 响应

id
或来自 Azure AD B2C 门户用户刀片的 id
,而不是来自 Microsoft SSO
oid

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