#c# #azure-active-directory #azure-ad-b2c #azure-ad-graph-api #identity-experience-framework
Вопрос:
Мы пытаемся создать пользователя в Azure AD B2C (облачный клиент, а не локальный) с помощью библиотеки C#. Я не могу войти в систему с новым пользователем; это говорит о том, что срок действия пароля истек. Из журнала входа в AD B2C:
Однако я создаю их с отключенным сроком действия пароля, вот так:
PasswordProfile passwordProfile = GetPasswordProfile(password);
var newB2cUser = new User
{
Id = id,
MailNickname = id,
UserPrincipalName = $"{id}@{tenant}",
GivenName = claims.FirstName,
Surname = claims.LastName,
DisplayName = displayName,
AccountEnabled = true,
PasswordProfile = passwordProfile,
PasswordPolicies = "DisablePasswordExpiration,DisableStrongPassword",
Identities = new List<ObjectIdentity>
{
new ObjectIdentity
{
SignInType = "emailAddress",
IssuerAssignedId = claims.Email,
Issuer = tenant
}
}
};
User createdB2cUser = await this.GraphServiceClient.Users.Request().AddAsync(newB2cUser);
…и с профилем пароля, созданным таким образом:
private static PasswordProfile GetPasswordProfile(string password)
{
var passwordProfile = new PasswordProfile
{
Password = password,
ForceChangePasswordNextSignIn = false,
ForceChangePasswordNextSignInWithMfa = false
};
return passwordProfile;
}
Мы использовали код, подобный приведенному выше, для постоянного создания пользователей, которым необходимо сбросить пароль при входе в систему. Теперь нам нужно создать пользователя с заданным паролем, срок действия которого не истечет немедленно (например, для заполнения тестовой среды). Я добавил то, что, по моему мнению, было правильной политикой паролей и профилем пароля выше. Что происходит?
Ответ №1:
Я не вижу ничего плохого в приведенном вами примере кода. Но пытались ли вы достичь той же цели напрямую с помощью Graph API? Просто чтобы понять, что происходит и в чем может быть ошибка. Вы можете использовать GraphExplorer: https://developer.microsoft.com/en-us/graph/graph-explorer
Вызовите запрос POST на https://graph.microsoft.com/v1.0/users конечная точка с аналогичным JSON, чтобы узнать, сталкиваетесь ли вы с той же проблемой.
{
"id": "fcaba916-17b0-4d88-84ea-03371d55067a",
"mailNickname": "MelissaD",
"userPrincipalName": "MelissaD@contoso.onmicrosoft.com",
"givenName": "Melissa",
"surname": "Darrow",
"displayName": "Melissa Darrow",
"accountEnabled": true,
"passwordPolicies": "DisablePasswordExpiration,DisableStrongPassword",
"passwordProfile": {
"password": "da413e48-180d-1945-6025-d7e5947711ed",
"forceChangePasswordNextSignIn": false,
"forceChangePasswordNextSignInWithMfa": false
},
"identities": [
{
"signInType": "emailAddress",
"issuer": "yourissuer",
"issuerAssignedId": "email"
}
]
}
Попробуйте смоделировать тело запроса точно так же, как это делает клиент Graph, чтобы знать, что происходит за кулисами.
Комментарии:
1. Я не думаю, что в запросе что-то не так, иначе я бы получил ответную ошибку, нет? Сетевой клиент сопоставляется непосредственно с параметрами запроса.
2. Не могли бы вы, пожалуйста, опубликовать один образец запроса JSON, идентичный тому, который приводит к этой проблеме? Я хочу попытаться воспроизвести проблему со своей стороны.
3. Мы двинулись дальше и нашли другой подход (требуется первоначальный сброс пароля для новых пользователей). Боюсь, больше нет времени возиться с этим. Буду держать этот вопрос открытым на случай, если есть какой-то трюк, чтобы заставить это работать, хотел бы посмотреть, так ли это. В любом случае, спасибо тебе.