【问题标题】:asp.net identity with domain controller具有域控制器的 asp.net 身份
【发布时间】:2015-12-17 16:14:02
【问题描述】:

如果用户在域控制器中,我需要使用他们的域用户/密码对用户进行身份验证,但该应用程序也应该可供其他用户使用,这些用户应该使用自己的用户名/密码进行身份验证;这应该存储在应用程序数据库中,并根据数据库检查他们的用户名/密码。

到目前为止,我从 vs2015 中的新 asp.net 模板开始,选择个人用户帐户。 我可以通过域控制器对用户进行身份验证,但如果成功,我将无法将用户存储到 HttpContext.User 属性。

在 SignInManager 中,我调用 PasswordSignIn 并根据 AD 检查返回成功或失败。

public SignInStatus PasswordSignIn(string userName, string password, bool isPersistent, bool shouldLockout) {
  if(AuthenticateAD(userName, password)) {
//
// to create identity/principal and assign to HttpContext.User
//
    return SignInStatus.Success;
  }
  else {
    return SignInStatus.Failure;
  }
}

public bool AuthenticateAD(string username, string password) {
  using(var context = new PrincipalContext(ContextType.Domain, "domainname")) {
    return context.ValidateCredentials(username, password);
  }
}

感谢任何提示!

【问题讨论】:

    标签: asp.net-mvc claims-based-identity


    【解决方案1】:

    真正有效的唯一方法是在应用程序中为 AD 中的用户创建代理用户。本质上,您只需设置一个脚本,根据 AD 中的数据按计划(每晚等根据您的需要)填充新用户/更新现有用户。然后,您只与一种类型的用户打交道,无论他们是域的一部分还是外部的。您需要做的唯一更改是通过 AD 或通过标准密码身份验证有选择地进行身份验证。无论哪种方式,相同的用户主体都在起作用。

    【讨论】:

      【解决方案2】:

      您可以使用 ADFS 并允许用户选择在哪里进行身份验证。使用默认模板实现非常简单。就像通常的登录机制一样,通过谷歌和本地帐户登录。

      我认为这是最正确的做事方式,因为域用户最终可能会使用 Kerberos/Ntlm,如果他们愿意的话,它会降低系统的复杂性。

      这是一个 WS-Fed 示例:Using Claims in your Web App is Easier with the new OWIN Security Components

      对于其他内容,您可以使用默认模板创建应用程序。该应用程序将具有外部身份验证内容作为示例。

      【讨论】:

        猜你喜欢
        • 2015-03-27
        • 1970-01-01
        • 2021-01-11
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多