【发布时间】:2016-02-18 02:10:35
【问题描述】:
我仍在尝试修补新的 ASP.NET Core MVC6(以前的 vNext)。这次我尝试针对 Active Directory 而不是实体框架数据库来实现我的身份验证。 由于我发现的文档太少,所以我采用了非常出色的 ASP.NET-Template 并开始根据我的需要对其进行修改。 我还使用 ReSharper 来反编译 Parts,因为我对 Details 非常感兴趣。
为了不深入细节,我有点担心我做的不是微软想要的:
我保留了SignInManager,并删除了UserManager,因为
return await _signInManager.PasswordSignInAsync(model.UserName, model.Password, false, false);
内部调用UserManager。现在它变得相当棘手:为了提供实体框架的替代存储,我需要实现
IUserPasswordStore<ApplicationUser>
其中有大约 15 种方法,其中大多数似乎从未被我简单的登录检查调用过。 此外,我还需要实现
IRoleStore<IdentityRole>
还有另外 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;
}
根据其他 SO-Threads,没有办法获取 AD 的密码,所以我也无法正确实现。
我认为要走的路也是覆盖SignInManager,但这似乎会获得相当多的代码,甚至不需要。另外 2 个 Store-Interfaces 似乎对 SOLID 造成了很大的伤害,因为接口太大了。
我是不是有什么根本性的错误?
【问题讨论】:
-
ASP.NET Core 是开源的,所以我不知道你为什么要反编译来理解它。话虽这么说,我真的不明白你在问什么。
-
如果要使用 AD 帐户实现 Windows 身份验证,请检查 this question。
-
@poke:感谢您的反馈,我正在尝试在没有 EF 的情况下使用 AD 来实施新的安全系统。我还需要一个 Login-Site 和一个 AccountController,而不仅仅是 AuthorizationPolicy。我的问题基本上是,如何正确实施这一点,因为所需的实施量告诉我,我做错了。通常我不会问那么宽泛的问题,但我搜索了很长时间并没有找到任何提示。
-
您需要帐户控制器做什么? Windows 身份验证是隐式的; Windows 身份验证没有“输入您的密码,我会根据 AD 进行检查”之类的东西。
标签: c# asp.net-core asp.net-core-mvc