【问题标题】:AJAX request to C# handler to authenticate with ActiveDirectory对 C# 处理程序的 AJAX 请求以使用 ActiveDirectory 进行身份验证
【发布时间】:2012-06-08 15:14:04
【问题描述】:

所以我正在使用 jQuery Mobile 开发一个移动网络应用程序,我需要从应用程序的远程服务器请求一些数据。我从 C# SOAP Web 服务或从返回 JSON 的 IHttpHandler 获取数据。在返回任何数据之前,我需要以某种方式通过 Web 服务/处理程序进行身份验证。我希望使用 ActiveDirectory,并通过 AJAX 请求以某种方式将用户名和散列密码传递给服务器。问题是,在 C# 中使用 ActiveDirectory 进行身份验证的示例涉及将纯文本用户名和密码传递给 PrincipalContext.ValidateCredentials。有什么方法可以安全地将凭据传递给 C# 服务并让它通过 AD 进行身份验证,而无需知道明文密码?

编辑: 想也许我可以在客户端对密码进行哈希处理,将其传递给服务器,让服务器获取所请求用户的 AD 密码并以相同的方式对其进行哈希处理,然后进行比较,但是getting the AD password isn't possible

编辑:查看aSSL

【问题讨论】:

  • 这是一个面向互联网的网站?
  • 不是真的,不——它会存在于移动设备上。它应该只是公司内的用户,即拥有 AD 帐户的用户。
  • 嗯,实际上应用程序可能最终会在某个时候出现在面向公众的服务器上。不过,似乎当我这样做时,我可以通过 IIS 保护它。但主要目标是让应用程序在某人的设备上运行,这样应用程序就不会知道PrincipalContext 或类似的信息。
  • 您是否考虑过将某种类型的唯一电话机标识符链接到后端数据库中经过验证的用户,并对其进行身份验证?

标签: c# ajax security authentication active-directory


【解决方案1】:

如果您正在使用 jquery ui 开发移动网络,它不会存在于设备上,它将存在于您的网络服务器上(iis,如果它是一个网络应用程序)。您的应用程序可以使用 Windows 身份验证针对它需要查询的服务进行身份验证,但这取决于用于运行应用程序的用户/正在使用的模拟。
问题是您的应用程序和此服务如何在它们与互联网之间进行通信。如果互联网无法访问该服务,我不知道您应该担心多少安全传输。
您还可以查看基于 ad fs / ad fs 2 的安全解决方案和 wcf 集成选项,例如 here 的解释。
这些解决方案实现了您正在谈论的概念,AD FS 是对传递的凭据进行身份验证/验证并向应用程序/服务返​​回令牌的服务。通常与 AD FS 的通信使用 ssl 来保护传输层,并对消息进行签名,以确保没有人在中间弄乱它们。
当然,您可以自己实现这样的机制。您不需要从活动目录中获取密码,您只需要查看是否可以验证传递的凭据(用户名/密码),使用提供的代码示例here

【讨论】:

  • 该应用程序可能会存在于某处的服务器上,用户只能通过浏览器访问它,但我还使用 PhoneGap 构建了一个原生 Android 版本,并且将来可能会构建一个 iOS 版本.我希望它不必存在于服务器上,而是安装在移动设备上。
  • 在这种情况下,安装在设备上的应用程序必须与服务通信?
  • 是的。无论应用位于何处,它都需要从服务中获取数据。
  • 好吧,从服务的角度来看,我的解决方案仍然有效(使用 .net 提供的类来验证凭据)。从设备的角度来看,您仍然可以使用 SSL 与您的服务进行通信,或者实现您自己的任何加密/签名协议。关键是,您在任何情况下都不需要从广告中读取密码,而是使用我在答案中提供的代码来验证 WAS 传递的内容是否正确。
  • 所以您建议通过 HTTPS 向服务传递纯文本密码,并使用基本的PrincipalContext.ValidateCredentials 验证用户名/密码与 AD 是否正确?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-01
  • 2013-11-22
  • 2017-10-14
  • 1970-01-01
  • 2014-01-06
  • 1970-01-01
相关资源
最近更新 更多