- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在学习使用 .NET Identity。我必须向 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
中调用 Membership Validate
方法。我同意这一点。事实上,我认为重写该方法也是错误的。
还建议我使用 UserLogins
为我的 AD 提供提供商 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;
}
因此,如果我想根据多个提供者对用户进行身份验证,我可以为每个提供者创建一个提供者 key ,并将这些提供者 key 分配给用户。并且此代码将针对他们验证用户。但是我应该把这段代码放在哪里呢?我应该遵循什么约定?
我不喜欢自己编写 AD 验证代码,因为我认为 ActiveDirectoryMembershipProvider
可以比我自己的代码做得更好。同样对于这两种情况,无论如何我都必须添加对 System.DirectoryServices
的引用。
最佳答案
您不想将 MembershipProvider 与身份混合在一起。您最有可能想要做的是像对待身份对待其他外部登录(如 google/facebook)的方式一样对待登录到 ActiveDirectory。
这基本上归结为将 AD 用户名存储为登录名:
userManager.AddLogin(<userId>, new UserLoginInfo("ActiveDirectory", "<ADUserName>")
如果您只通过 AD 登录,那么您确实可以覆盖 PasswordSignIn 以显式 validate against AD
否则,您只想在 AD 的特定登录流程中使用它,保留现有的本地密码/社交登录功能。
关于c# - 如何将 ActiveDirectoryMembershipProvider 与 ASP.NET Identity 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29888503/
我想使用 ActiveDirectoryMembershipProvider 的 ValidateUser 方法来验证用户是否存在于 AD 中。 我正在表单中输入用户名和密码。然后我想实例化提供者并调
一个可以使用 new PrincipalContext(ContextType.Domain,null) 没有为 Active Directory 提供任何连接字符串。 使用 ActiveDire
在 IIS 7 上运行的旧应用程序之一最近已移植到 Azure 应用服务。 该应用程序使用 WebMatrix(简单成员(member)资格)和 Active Directory 作为成员(membe
我意识到还有其他(首选)方法可以通过 Azure Active Directory 实现身份验证,但是是否可以将标准 ActiveDirectoryMembershipProvider 与 Azure
在 IIS 7 上运行的旧应用程序之一最近已移植到 Azure 应用服务。 该应用程序使用 WebMatrix(简单成员(member)资格)和 Active Directory 作为成员(membe
我意识到还有其他(首选)方法可以通过 Azure Active Directory 实现身份验证,但是是否可以将标准 ActiveDirectoryMembershipProvider 与 Azure
我想知道是否有人可以解释使用 ActiveDirectoryMembershipProvider 的表单例份验证与 Windows 身份验证之间的区别。什么时候使用其中一种,好处是什么? 我正在开发一
我想创建一个仅供员工在内部使用的网络应用程序(网站)。 我想使用事件目录成员提供程序来验证用户。令我困惑的是如何管理配置文件和角色,以及如何将具有 FK 的用户链接到其他表。 到目前为止,我正在考虑做
我正在尝试配置 ActiveDirectoryMembershipProvider,但我不断收到消息“无法与服务器建立安全连接”。 我在 MSDN 网站上在线看到我应该在我的网站上将信任级别配置为不受
我们有一个在客户站点上运行的 ASP.NET 应用程序,该应用程序使用 ActiveDirectory 通过 ActiveDirectoryMembershipProvider 进行用户登录。我们指向
我有一个使用 ActiveDirectoryMembershipProvider 进行表单例份验证的 Web 应用程序。效果很好...用户可以成功登录。 用户登录后,可以更改密码。我们使用 Chang
我们在 .NET 4.7.2 上有一个可用的 ASP.Net Web 应用程序(.NET Framework 而非 Core),已部署到经典云服务。我们正在尝试将其部署到 Azure 应用服务。到目前
我正在学习使用 .NET Identity。我必须向 Active Directory 进行身份验证。为此,我正在尝试使用 ActiveDirecotoryMembershipProvider。我必须
我正在尝试使用 AuthorizeAttribute 在 ASP.NET MVC 4 Intranet Web 应用程序中实现基于 Active Directory 角色的授权。 [Authorize
我公司最近从专用 T-1 连接改为宽带业务 Comcast 连接。紧接着,这个问题就开始了。 我们的开发机器是本地的,但我们的 Active Directory 服务器(用于在部署前测试和暂存产品)是
我已将 ActiveDirectoryMembershipProvider connectionProtection 属性设置为安全,根据 MSDN 文档说明,当将此设置为安全时,会出现以下问题: “
在我的 asp.net mvc 应用程序中,我使用的是 activedirectorymembershipprovider。在事件目录中,为了简单起见,我创建了几个类似于“普通”和“管理员”的角色(组
我是一名优秀的程序员,十分优秀!