Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core mvc 如何使vNext使用我的自定义标识码?_Asp.net Core Mvc_Asp.net Identity 3 - Fatal编程技术网

Asp.net core mvc 如何使vNext使用我的自定义标识码?

Asp.net core mvc 如何使vNext使用我的自定义标识码?,asp.net-core-mvc,asp.net-identity-3,Asp.net Core Mvc,Asp.net Identity 3,我想实现一个自定义登录系统,因为我的用户存储在不同的数据库中,我只有一个dll来验证凭据,所以我不需要数据库。我只想能够登录(与角色:管理员和用户)和注销此应用程序。在工具的数据库中,我只保存用户名和他的角色(没有密码) 第一:我必须实现哪些类才能达到预期的效果 第二:如何配置应用程序,使其使用我的自定义代码 我不确定我做得是否100%正确,但看看: 1。配置cookies身份验证 public void Configure(IApplicationBuilder app)

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

第一:我必须实现哪些类才能达到预期的效果


第二:如何配置应用程序,使其使用我的自定义代码

我不确定我做得是否100%正确,但看看:

1。配置cookies身份验证

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

        }
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("");
   }
}
2。登录

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

        }
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("");
   }
}
公共类登录控制器:控制器
{
公共IActionResult登录(登录模型表单)
{    
var userId=CustomLoginLogic(表单);
var索赔=新列表
{
新声明(ClaimTypes.NameIdentifier、result.UserId)
};
var claimsPrincipal=new claimsPrincipal(new ClaimsIdentity(claims,CookieAuthenticationDefaults.AuthenticationScheme));
context.Response.SignIn(CookieAuthenticationDefaults.AuthenticationScheme,claimsPrincipal);
返回内容(“”);
}
}

我理解了
CustomLoginLogic(表单)
的思想,它只是根据我的BL需求返回用户ID,但我不完全理解索赔部分。索赔的名称是什么?我如何使用它来授权基于此的访问?使用我正在执行的角色:
[Authorize(roles=“Admin”)]
我想您也可以添加另一个类型为
ClaimTypes.Role
的声明,并检查它是否有助于基于角色的授权我了解了
ClaimTypes
的目的,但我有最后一个问题:当使用不具有的角色访问控制器操作时,它不会直接登录。最后一步该怎么做?我尝试:
options.LoginPath=newpathString(“/Account/Login”)没关系,它将转到我的虚拟身份验证控制器并重定向回来