2023-02-16 367
我正在尝试学习如何使用ASP.NET身份.我的场景是我必须对Active Directory进行身份验证.为此目的,我试图使用ActiveDirecotoryMembershipProvider.我要做的是 –
我的方式是我在我的web.config中配置了使用ActiveDirectoryMembershipProvider作为默认会员提供程序.然后我覆盖我ApplicationSignInManager类(继承SignInManager)中的PasswordSignInAsync方法,如下所示 –
public override Task<SignInStatus> PasswordSignInAsync(string userName, string password, bool isPersistent, bool shouldLockout)
{
var adok = Membership.Provider.ValidateUser(userName, password);
if (adok)
{
var user = UserManager.FindByName(userName);
if (user == null)
return Task.FromResult<SignInStatus>(SignInStatus.Failure);
else
{
base.SignInAsync(user, isPersistent, shouldLockout);
return Task.FromResult<SignInStatus>(SignInStatus.Success);
}
}
else
return Task.FromResult<SignInStatus>(SignInStatus.Failure);
}
这似乎有效.但我认为这不是正确的方法.任何人都可以建议任何更好的方法来实现这个吗?
这里是我称之为上面提到的
的方式
var result = await SignInManager.PasswordSignInAsync(username, password, isPersistent: false, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
return RedirectToAction("Index", "Home");
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid login attempt.");
return View();
}
根据我得到的答案,我不应该在PasswordSignInAsync里面调用empersep Validate方法.我同意这一点.事实上,我认为覆盖方法也是错误的.
还建议我使用UserLogins我会给我的广告提供商ID.但我可以考虑使用这件事的唯一方法如下 –
IList<UserLoginInfo> loginInfos = await SignInManager.UserManager.GetLoginsAsync(username);
var valid = false;
foreach(var info in loginInfos)
{
valid = Membership.Providers[info.ProviderKey].ValidateUser(username, password);
if (valid) break;
}
所以,如果我想对多个提供商验证用户,我可以为每个提供者创建提供商密钥,并将这些提供商键分配给用户.此代码将验证用户对策.但我应该把这个代码在哪里?我应该遵循哪些会议?
我并不热衷于编写广告验证,因为我认为ActiveDirectoryMembershipProvider可以比我自己的代码做得更好.另外,对于这两种情况,我都必须添加参考System.DirectoryServices.
您不希望使用身份将成员身份提复.您最可能做的是,类似于身份对待其他外部登录(如Google/Facebook)的attemirectory的登录.
这基本上归结为将广告用户名存储为登录:
userManager.AddLogin(<userId>, new UserLoginInfo(“ActiveDirectory”, “<ADUserName>”)
如果您只能通过广告登录,那么您确实可以覆盖passwordsignin,以显式验证AD
否则,您只需要在AD的特定登录流中,保留现有本地密码/社交登录功能.
一步之后尝试,可能是它会有用.
以上所述是小编给大家介绍的如何在ASP.Net Identity中使用ActiveDirectoryMembershipProvider?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/33990.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态