注册后身份服务器4自动登录

时间:2017-03-27 07:42:00

标签: identityserver4

我希望用户在注册MVC应用程序后自动登录(现在不需要电子邮件验证),我已经按照IdSrv3的这个示例编辑了一些部分:

http://benfoster.io/blog/identity-server-post-registration-sign-in

这是我的设置:

MVC:

public class AuthController : Controller
{
    [HttpGet]
    [AllowAnonymous]
    public async Task LogIn()
    {
        var properties = new AuthenticationProperties
        {
            RedirectUri = Url.Action("index", "home", HttpContext.Request.GetUri().Scheme)
        };

       await HttpContext.Authentication.ChallengeAsync(properties);
    }

    [HttpGet]
    [AllowAnonymous]
    public IActionResult Register()
    {
        var returnUrl = $"http://localhost:5002/auth/login";
        return Redirect($"http://localhost:5000/Account/Register?returnUrl={returnUrl}");
    }
}

使用ASp.Net核心身份的Identity Server 4

[Authorize]
    public class AccountController : Controller
    {
       //
        // GET: /Account/Register
        [HttpGet]
        [AllowAnonymous]
        public IActionResult Register(string returnUrl = null)
        {
           ViewData["ReturnUrl"] = returnUrl;
           return View();
        }

    //
    // POST: /Account/Register
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Register(RegisterViewModel model, string returnUrl = null)
    {
        ViewData["ReturnUrl"] = returnUrl;
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
            var result = await _userManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                var otac = user.GenerateOTAC(TimeSpan.FromMinutes(1));
                await _userManager.UpdateAsync(user);
                await _signInManager.SignInAsync(user, isPersistent: false);
                _logger.LogInformation(3, "User created a new account with password.");
                if (string.IsNullOrEmpty(returnUrl))
                {
                    return RedirectToAction(nameof(HomeController.Index), "Home");
                }
                else
                {
                    return Redirect(returnUrl);
                }
            }
            AddErrors(result);
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }
}

我无法实现OTAC握手,因为示例显示,因为IdSrv 4中不再有用户服务。

该方案的工作原理如下:

1 - 用户在MVC应用程序中单击“注册”,然后重定向到IdSrv帐户 - >注册,将MVC Auth-&gt;登录作为返回URI传递。 2 - 用户在IdSrv中完成注册后,执行另一个重定向以返回MVC Auth-> Login。 3 - MVC Auth-&gt; Login创建了一个挑战,由于用户已使用cookie在注册过程中登录,因此身份验证cookie将被合并(根据IdSrv日志),并且现在没有登录屏幕用户已登录并登陆MVC应用程序。

这个设置是否有任何严重缺陷?有没有办法在IdSrv4中实现OTAC握手?

感谢,

1 个答案:

答案 0 :(得分:0)

在您的情况下,这可能有效

grant_type=authorization_code