【问题标题】:How to make vNext use my custom Identity code?如何让 vNext 使用我的自定义身份代码?
【发布时间】:2015-07-29 09:10:15
【问题描述】:

我想实现一个自定义登录系统,因为我的用户存储在不同的数据库中,我只有一个 dll 来验证凭据,所以我不需要数据库。我只想要登录(使用角色:管理员和用户)和注销此应用程序的能力。在工具的数据库中,我只保存用户名和他的角色(无密码)。

首先:我必须实现哪些类才能达到预期的效果?

第二:如何配置应用程序以便它使用我的自定义代码?

【问题讨论】:

    标签: asp.net-core-mvc asp.net-identity-3


    【解决方案1】:

    我不确定我的做法是否 100% 正确,但请看一下:

    1.配置 cookie 身份验证

            public void Configure(IApplicationBuilder app)
            {
                app.UseCookieAuthentication(options =>
                {
                    options.AutomaticAuthentication = true;
                    options.SlidingExpiration = true;
                    options.ExpireTimeSpan = TimeSpan.FromMinutes(30);
                });
    
            }
    

    2。登录

    public class LoginController: Controller 
    {
    
       public IActionResult SignIn(LoginModel form)
       {    
            var userId = CustomLoginLogic(form);
    
            var claims = new List<Claim>
                    {
                        new Claim(ClaimTypes.NameIdentifier, result.UserId)
                    };
            var claimsPrincipal = new ClaimsPrincipal(new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme));                       
            context.Response.SignIn(CookieAuthenticationDefaults.AuthenticationScheme, claimsPrincipal);
            return Content("");
       }
    }
    

    【讨论】:

    • 我理解CustomLoginLogic(form) 的想法,它只是根据我的 BL 需求返回用户 ID,但我不完全理解索赔部分。索赔的名称是什么?以及如何使用它来授权访问?使用我正在做的角色:[Authorize(Roles = "Admin")]
    • 我猜你也可以添加另一个类型为ClaimTypes.Role 的声明,并检查它是否有助于基于角色的授权
    • 我弄清楚了ClaimTypes 的用途,但我有最后一个问题:当访问具有它没有的角色的控制器操作时,它不会重定向登录。我该如何做这最后一步?我试过了:options.LoginPath = new PathString("/Account/Login");
    • 没关系,它会转到我的虚拟身份验证控制器并重定向回来
    猜你喜欢
    • 1970-01-01
    • 2021-07-13
    • 2014-01-01
    • 2021-09-25
    • 2014-06-05
    • 2021-12-17
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    相关资源
    最近更新 更多