Объявление B2C Предотвращает истечение срока действия пароля для нового пользователя

#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. Мы двинулись дальше и нашли другой подход (требуется первоначальный сброс пароля для новых пользователей). Боюсь, больше нет времени возиться с этим. Буду держать этот вопрос открытым на случай, если есть какой-то трюк, чтобы заставить это работать, хотел бы посмотреть, так ли это. В любом случае, спасибо тебе.