Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.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 1.0(又名ASP.NET 5)的新身份验证系统_C#_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

C# 来自ASP.NET Core 1.0(又名ASP.NET 5)的新身份验证系统

C# 来自ASP.NET Core 1.0(又名ASP.NET 5)的新身份验证系统,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,我仍在尝试修补新的ASP.NET核心MVC6(以前的vNext)。这次,我尝试对Active Directory而不是实体框架数据库实现身份验证。 由于我发现的文档太少,所以我采用了非常好的ASP.NET模板,并开始根据需要对其进行修改。 我还使用ReSharper来反编译这些部分,因为我对细节非常感兴趣 为了不深入细节,我有点担心我做的事情没有达到微软的预期: 我保留了登录管理器,并删除了用户管理器,因为 return await _signInManager.PasswordSignInAs

我仍在尝试修补新的ASP.NET核心MVC6(以前的vNext)。这次,我尝试对Active Directory而不是实体框架数据库实现身份验证。 由于我发现的文档太少,所以我采用了非常好的ASP.NET模板,并开始根据需要对其进行修改。 我还使用ReSharper来反编译这些部分,因为我对细节非常感兴趣

为了不深入细节,我有点担心我做的事情没有达到微软的预期: 我保留了
登录管理器
,并删除了
用户管理器
,因为

return await _signInManager.PasswordSignInAsync(model.UserName, model.Password, false, false);
在内部调用
UserManager
。现在它变得相当棘手:提供我需要实现的替代实体存储框架

IUserPasswordStore<ApplicationUser>
IUserPasswordStore
它有大约15种方法,其中大多数似乎从未被我的简单登录检查调用。 此外,我还需要实施

IRoleStore<IdentityRole>
IRoleStore
它还有另外10种方法,尽管我现在甚至不想使用基于角色的安全性

此外,验证密码确实需要散列,以下是反编译方法:

protected virtual async Task<PasswordVerificationResult> VerifyPasswordAsync(IUserPasswordStore<TUser> store, TUser user, string password)
{
  string hashedPassword = (string) await store.GetPasswordHashAsync(user, this.CancellationToken);
  return hashedPassword != null ? this.PasswordHasher.VerifyHashedPassword(user, hashedPassword, password) : PasswordVerificationResult.Failed;
}
受保护的虚拟异步任务VerifyPasswordAsync(IUserPasswordStore存储、TUser用户、字符串密码)
{
string hashedPassword=(string)wait store.GetPasswordHashAsync(用户,this.CancellationToken);
return hashedPassword!=null?this.PasswordHasher.VerifyHashedPassword(user,hashedPassword,password):PasswordVerificationResult.失败;
}
根据其他SO线程的说法,没有办法获得广告的密码,所以我也无法正确实现

我认为最好的方法是覆盖
SignInManager
,但这似乎会得到大量的代码,其中大部分甚至不需要。另外,2个存储接口似乎对SOLID造成了很大的伤害,因为接口太大了


我知道有什么根本性的问题吗?

我们不提供广告版本的原因是安全性

通过实施一个,你现在可以打开一个广告来进行暴力攻击,因为你没有禁用帐户(因为这可能会占用管理员权限,任何人都不应该以域管理员的身份运行他们的web应用),或者你确实禁用了帐户,现在,通过一些请求,我可以将你的用户锁定在广告之外,这不仅会影响你的web应用,但是他们的台式电脑

现在再加上一点,如果出现漏洞,我现在通过了你的广告的身份验证,这会让攻击者高兴,但不会让你的网络管理员高兴

另外,密码检查不需要散列密码,只需在VerifyPasswordAsync中根据AD进行身份验证并返回相应的结果即可


我的建议是,如果您在仅限intranet的环境中运行,请查看集成身份验证;如果您希望在云中运行,请查看Windows Azure AD。这两种方法都比试图将广告应用到基于HTML表单的方案中要安全得多。

是开源的,所以我不知道为什么要对其进行反编译以理解它。话虽如此,我真的不明白你在问什么。请检查你是否想使用AD帐户实施Windows身份验证。@poke:谢谢你的反馈,我正在尝试在没有EF的情况下实施新的安全系统,但需要一个广告。我还需要一个登录站点和一个AccountController,而不仅仅是一个授权策略。我的问题基本上是,如何正确地实现它,因为所需的实现量告诉我,我做错了。通常我不会问那么广泛的问题,但我搜索了很长时间,没有找到任何提示。你需要一个账户管理员做什么?Windows身份验证是隐式的;Windows身份验证中没有“输入密码,我会对照广告检查密码”之类的内容。非常感谢,这似乎是合理的。但是,覆盖这些商店,离开经理,是你推荐的方式,即使商店有这么多的方法?老实说,我会走手工路线,完全避免身份。您不希望从web、组管理或任何开销中重置密码。更糟糕的是,当您将身份写入cookie时,它在cookie过期之前不会更改。因此,如果你在广告中删除某个人,你的web应用程序仍然会看到他们在广告中。好吧,我仍然需要用户字段,只是为了显示一个简单的“Hello Matthias”并授权控制器。看来我需要找到一些中间立场。但是你给了我一些很好的提示,非常感谢。WindowsAzure广告将支持这一点。但我担心这当然要付出代价。