我希望用户在注册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握手?
感谢,
答案 0 :(得分:0)
在您的情况下,这可能有效
grant_type=authorization_code