在我们的应用程序中,我们支持在特定Intranet域中授权使用NTLM的用户,以及使用我们存储在数据库中的标准登录/密码对授权的用户。当一个新用户注册时,很高兴知道他是否拥有NTLM证书并且只是提示他使用这些证书,而不是通用的注册表。
即。类似的东西(伪代码):
if user.has_ntlm_credentials:
ask ("You are known as {domain}\{username}, register in the application?")
else:
show_login_password_registration_form ()
如果我让页面发回401 HTTP代码并要求NTLM通知,我将获得上述如果用户已经过身份验证(例如来自该Intranet并使用Windows)。但是对于其他每个用户来说,浏览器都会显示丑陋的身份验证对话框,在注册页面上看起来非常不合适。
所以,问题是,是否可以向浏览器询问已有的NTLM凭据(如果有的话)?
答案 0 :(得分:1)
没有;但您可以使用Negotiate,这将要求用户具有现有Kerberos票证(在此方案中通过Active Directory身份验证)进行身份验证。对于没有票证的用户,没有提示。
NTLM和Negotiate不同的身份验证机制:NTLM是一种简单的质询/响应机制,而Negotiate则是更安全(和更复杂)的Kerberos协议的封装。这两种机制都可用于单点登录" Windows用户只需要进行一次身份验证,登录到他们的计算机时,后续网络连接将使用这些登录的用户凭据进行身份验证。 (尽管当域加入Active Directory时,Negotiate将仅工作,而NTLM可以在工作站设置中工作。)