1

我正在使用带有 OpenIDDict 的 ASP.NET MVC Core。我正在为 OpenIDDict 使用带有 cookie 身份验证和 JWT 的视图。除了以下场景外,一切都完美无缺:

身份更改为首先向用户发送确认电子邮件以确认他们的电子邮件地址。用户通过电子邮件获取链接并单击它。然后他们登录。简单的。与此同时,他们无法访问任何页面。

但我注意到,使用邮递员,他们可以通过 OpenIDDict 通过 APi 访问解决方案。他们仍然获得授权。当他们获得授权后,他们就可以访问 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 将来会帮助别人

4

1 回答 1

2

虽然您的解决方案有效,但您可能更喜欢配置 ASP.NET Core 身份,以便在调用SignInManager.CanSignInAsync(user). 您可以在身份选项中进行配置:

services.AddIdentity<ApplicationUser, IdentityRole>(options => {
    options.SignIn.RequireConfirmedEmail = true;
});
于 2017-01-27T02:58:10.443 回答