首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有Identity Core和Asp.net Core 3.1的多重登录页面

具有Identity Core和Asp.net Core 3.1的多重登录页面
EN

Stack Overflow用户
提问于 2020-11-24 15:59:40
回答 1查看 251关注 0票数 2

我有一个有2个区域的Asp.net核心应用程序,每个区域都有自己的登录页面。我使用以下代码将用户重定向到登录页面:

代码语言:javascript
复制
  services.AddAuthentication(opt => { opt.DefaultScheme = "AdminAuth";})
                    .AddCookie("UserAuth", opt => { opt.LoginPath = "/User/Login"; opt.AccessDeniedPath = "/User/AccessDenied";  })
                    .AddCookie("AdminAuth", opt => { opt.LoginPath = "/Identity/Account/Login"; opt.AccessDeniedPath = "/Admin/Dashboard/AccessDenied"; });

提交登录表单后,用户成功登录,但没有转到控制器并返回登录页面。我将这些属性用于控制器:对于Admin:

代码语言:javascript
复制
[Authorize(Roles = "Admin", AuthenticationSchemes = "AdminAuth")]

对于用户:

代码语言:javascript
复制
 [Authorize(Roles = "User", AuthenticationSchemes = "UserAuth")]

对于登录,我使用这个代码:

代码语言:javascript
复制
_signInManager.PasswordSignInAsync(model.Username, model.Password, false, lockoutOnFailure: false);
EN

回答 1

Stack Overflow用户

发布于 2020-11-24 18:00:06

Identity封装了基本cookie身份验证方法。但是identity不提供对应于该方案的cookie设置。

我建议您使用cookie身份验证,并将cookie添加到指定的方案中。或者其中一家企业使用基本cookie身份验证。而另一家企业使用身份。

请确保在使用HttpContext.SignInAsync("schema",claimsPrincipal)时指明这些架构。否则,它将只生成您在启动时配置的默认模式的cookie。

这是一个用户登录的示例。

代码语言:javascript
复制
    public IActionResult login()
    {
        string username = "username";
        string userpassword = "password";
        var userClaim = new List<Claim>
            {
                new Claim(ClaimTypes.Name,username),
                new Claim(ClaimTypes.Role,"User")
            };
        var personIdentity = new ClaimsIdentity(userClaim, "identitycard");
        var principle = new ClaimsPrincipal(new[] { personIdentity });

        HttpContext.SignInAsync("UserAuth", principle);
        return Redirect("resource");
    }

然后,将向浏览器写入两个cookie。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64982334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档