Подтверждение электронной почты зарегистрированного пользователя OpenIDDict

Я использую ASP.NET MVC Core с OpenIDDict. Я использую представления с аутентификацией файлов cookie и JWT для OpenIDDict. Все работает отлично, за исключением следующего сценария:

Идентификация изменена, чтобы сначала отправить пользователю электронное письмо с подтверждением, чтобы подтвердить свой адрес электронной почты. Пользователь получает ссылку по электронной почте и нажимает на нее. Затем они входят в систему. Простой. В то же время они не могут получить доступ ни к одной странице.

Но я заметил, что с помощью почтальона они могут получить доступ к решению через APi'S через OpenIDDict. Они все равно получают разрешение. И когда они авторизуются, они могут получить доступ к API.

Только что написав это, у меня была мозговая волна, и я мог просто ввести код в AuthenticationController во время действия обмена:

public async Task<IActionResult> Exchange(OpenIdConnectRequest request)
    {
        Debug.Assert(request.IsTokenRequest(),
            "The OpenIddict binder for ASP.NET Core MVC is not registered. " +
            "Make sure services.AddOpenIddict().AddMvcBinders() is correctly called.");

        if (request.IsPasswordGrantType())
        {
            var user = await _userManager.FindByNameAsync(request.Username);
            //if (user == null)
            if (user == null || !(await _userManager.IsEmailConfirmedAsync(user)))
            {

Работает ! Ну вот... ответил на свой вопрос. Mya поможет другим в будущем


person Bhail    schedule 26.01.2017    source источник


Ответы (1)


Хотя ваше решение работает, вы можете предпочесть настроить ASP.NET Core Identity, чтобы при вызове SignInManager.CanSignInAsync(user) выполнялась проверка «подтвержденная электронная почта». Вы можете настроить это в параметрах идентификации:

services.AddIdentity<ApplicationUser, IdentityRole>(options => {
    options.SignIn.RequireConfirmedEmail = true;
});
person Kévin Chalet    schedule 27.01.2017
comment
Спасибо. Но это дополнение к AddIdentity — это то, что запускает его в первую очередь! Так что ваше право, это гарантирует, что пользователю будет отправлено электронное письмо с подтверждением. Изменения в моем посте заключаются в том, как затем обрабатывать его из OpenIdDict, так как это также необходимо проверить. Кроме того, для полноты проверка электронной почты должна быть размещена в проверках внешних поставщиков, поскольку социальные сети не требуют этого. - person Bhail; 28.01.2017
comment
Вы упустили мою мысль: использование IsEmailConfirmedAsync в вашем собственном коде не обязательно, так как это делает за вас CanSignInAsync, когда включена опция RequireEmailConfirmation. - person Kévin Chalet; 28.01.2017
comment
@Bhail github.com/ openiddict/openiddict-samples/blob/master/samples/ - person Kévin Chalet; 28.01.2017