Identityserver4 Identity Server 4注册后自动登录
我希望用户在注册到MVC应用程序后自动登录(现在不需要电子邮件验证),我遵循了IdSrv3的此示例并编辑了一些部分: 以下是我的设置: MVC: 使用ASp.Net核心标识的Identity Server 4Identityserver4 Identity Server 4注册后自动登录,identityserver4,Identityserver4,我希望用户在注册到MVC应用程序后自动登录(现在不需要电子邮件验证),我遵循了IdSrv3的此示例并编辑了一些部分: 以下是我的设置: MVC: 使用ASp.Net核心标识的Identity Server 4 [Authorize] public class AccountController : Controller { // // GET: /Account/Register [HttpGet] [AllowAn
[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);
}
}
[授权]
公共类AccountController:控制器
{
//
//获取:/Account/注册
[HttpGet]
[异名]
公共IActionResult寄存器(字符串返回URL=null)
{
ViewData[“ReturnUrl”]=ReturnUrl;
返回视图();
}
//
//职位:/Account/Register
[HttpPost]
[异名]
[ValidateAntiForgeryToken]
公共异步任务寄存器(RegisterViewModel模型,字符串returnUrl=null)
{
ViewData[“ReturnUrl”]=ReturnUrl;
if(ModelState.IsValid)
{
var user=newapplicationuser{UserName=model.Email,Email=model.Email};
var result=await\u userManager.CreateAsync(用户、模型、密码);
if(result.successed)
{
var otac=user.GenerateOTAC(TimeSpan.frommins(1));
wait_userManager.UpdateAsync(用户);
wait _signInManager.SignInAsync(用户,ispersist:false);
_logger.LogInformation(3,“用户使用密码创建了一个新帐户”);
if(string.IsNullOrEmpty(returnUrl))
{
返回重定向到操作(nameof(HomeController.Index),“Home”);
}
其他的
{
返回重定向(returnUrl);
}
}
加法器(结果);
}
//如果我们走到这一步,有些东西失败了,重新显示形式
返回视图(模型);
}
}
正如示例所示,我无法实现OTAC握手,因为IDSRV4中不再有任何用户服务
该场景的工作原理如下:
1-用户在MVC应用程序中单击“注册”,然后重定向到IdSrv帐户->注册并传递MVC身份->作为返回URI登录。
2-用户在IdSrv中完成注册后,执行另一个重定向以返回MVC Auth->Login。
3-MVC Auth->Login创建了一个挑战,由于用户已经使用cookie在注册过程中登录,身份验证cookie被合并(根据IdSrv日志),并且没有出现登录屏幕,现在用户登录并登录到MVC应用程序
此设置是否存在任何安全缺陷?是否有任何方法可以在IdSrv4中实现OTAC握手
谢谢,在你的情况下,也许这可以奏效
[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)
{
await _signInManager.SignInAsync(user, isPersistent: false);
return LocalRedirect(returnUrl);
}
AddErrors(result);
}
// If we got this far, something failed, redisplay form
return View(model);
}
[HttpPost]
[异名]
[ValidateAntiForgeryToken]
公共异步任务寄存器(RegisterViewModel模型,字符串returnUrl=null)
{
ViewData[“ReturnUrl”]=ReturnUrl;
if(ModelState.IsValid)
{
var user=new ApplicationUser{UserName=model.Email,Email=model.Email
var result=await\u userManager.CreateAsync(用户、模型、密码);
if(result.successed)
{
wait _signInManager.SignInAsync(用户,ispersist:false);
返回LocalRedirect(returnUrl);
}
加法器(结果);
}
//如果我们走到这一步,有些东西失败了,重新显示形式
返回视图(模型);
}
您是否设法解决了此问题?能否共享代码?
[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)
{
await _signInManager.SignInAsync(user, isPersistent: false);
return LocalRedirect(returnUrl);
}
AddErrors(result);
}
// If we got this far, something failed, redisplay form
return View(model);
}