Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
C# ASP.net Core 2自定义身份验证(IsAuthenticated=false)_C#_Asp.net Core - Fatal编程技术网

C# ASP.net Core 2自定义身份验证(IsAuthenticated=false)

C# ASP.net Core 2自定义身份验证(IsAuthenticated=false),c#,asp.net-core,C#,Asp.net Core,我正在寻找一个使用C#for asp.net core 2编写的自定义身份验证的最小示例,该示例基于示例API密钥 Mircosoft在饼干方面做得很好,但这不是我想要的。因为我想使用API键(由http头、GET或Cookie提供),所以我从来没有调用过HttpContext.SignInAsync,这可能是我找不到/google解决的问题 我构建了一个简单的AuthenticationHandler(基于-因为我了解到定制中间件不再是主流),它看起来像这样: 内部类CustomAuthHan

我正在寻找一个使用C#for asp.net core 2编写的自定义身份验证的最小示例,该示例基于示例API密钥

Mircosoft在饼干方面做得很好,但这不是我想要的。因为我想使用API键(由http头、GET或Cookie提供),所以我从来没有调用过
HttpContext.SignInAsync
,这可能是我找不到/google解决的问题

我构建了一个简单的AuthenticationHandler(基于-因为我了解到定制中间件不再是主流),它看起来像这样:

内部类CustomAuthHandler:AuthenticationHandler
{
受保护的重写异步任务handleAuthenticateAync()
{
//解析cookies以查找APIKEY
if(Context.Request.Cookies.ContainsKey(“APIKEY”))
{
字符串APIKEY=Request.Cookies[“APIKEY”];
//…正在检查数据库中的APIKEY。。。
//创建索赔
风险值索赔=新[]
{
新索赔(/*…*/),
// ...
};
var Claimsidenty=新的索赔(索赔);
var claimsPrincipal=新的claimsPrincipal(索赔实体);
var票证=新的Authentication票证(claimsPrincipal,新的AuthenticationProperties(),“自定义方案”);
return AuthenticateResult.Success(ticket);//调用此行
}
返回AuthenticateResult.NoResult();
}
}

但是当我的API端点只有
[Authorize]
属性时,
DenyAnonymousAuthorizationRequirement
拒绝请求,因为用户不被允许(原因
isauthorizated==false
为只读,所有声明都正确显示)

更改
var claimsIdentity=newclaimsidentity(声明);类似于
var claimsIdentity=newclaimsidentity(声明“密码”)
(当然,使用最适合您的情况的
AuthenticationType
,而不是“Password”)


这里有一个类似的问题:

一些指针,AuthenticationScheme驱动一切,SignInAsync有一个重载,它接受auth方案-因此,基本上,如果您想推出自己的auth,请查看AuthenticationMiddleware并搜索安全响应,但何时调用SignInAsync?我试图在身份验证处理程序中调用它,但这并没有改变
IsAuthenticated
属性。因此,我在UseMvc或任何其他侦听/登录的设备上创建了中间件,然后当调用该端点时,我将通过任何方式对用户进行身份验证,用户名/密码或其他什么,然后调用signinasyncI。不要使用经典登录。当我尝试从IAAuthenticationSignInHandler实现
SignInAsync
时,我没有找到一种方法来设置
IsAuthenticated
IsAuthenticated是在您在contextWow上设置原则时设置的,这也修复了我的身份验证处理程序。这真的很模糊。我同意,也许文档可以更清楚地说明用法。。我想这个想法是,声明可以来自不同的来源,如果您有更多的来源(例如Auth0.Google、FB等外部身份验证),您可以一起信任它们,也可以只信任来自特定来源(在本例中为“密码”来源)的特定声明。这可能就是为什么在指定“密码”源之前,一切都不起作用的原因。