积极答复者
当用户已经登录到域之后,如何可以让HttpWebRequest类请求一个url的时候不需要提供密码就能够访问?

问题
-
问题是这样的:
1、用户的局域网使用AD,所有人的计算机都是登录到AD上的
2、用户另外使用一套OA,DOMINO平台,B/S架构,已经实现了和AD的单点登录,即登录到AD之后,可以直接访问这个OA而不需要再输入密码
现在的问题是,我有一个用C#编写的客户端程序,通过HttpWebRequest类去访问这个OA系统获取一些数据,之前我的做法是:
request = (HttpWebRequest)WebRequest.Create(sLocation);
request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(sUserName + ":" + sPassword)));即直接将用户名和密码发送给HTTP服务器,但是现在由于使用了单点登录,我已经没有办法获取用户的密码了(在AD里面我获取不到,用户也不同意在我的程序中另外保存一份密码,这样会造成不同步的问题),请问这种情况下,怎样才可以让我的C#程序正常连接HTTP服务器?
da jia hao!
答案
-
用 HttpWebRequest.Credentials 设置当前用户的凭据,或者设置 UseDefaultCredentials = true 试试看。如果是计算机在 AD 中,不需要设置凭据既可以实现正常的 NTLM 验证,对于 AD 集成第三方系统 SSO 的案例我没有遇到过,不过可以按照我说的方法试试看。
Mark Zhou- 已标记为答案 BoberSongModerator 2010年7月21日 7:16
-
如果是访问 Web 资源,利用 WebClient 的话,直接利用:
WebClient wc = new WebClient(...);
WebClient.UseDefaultCredentials = true;就好。它会直接在 HTTP Header 中加 www-authenticate 头标识。HttpWebRequest 也是一样。
NTML 是一种在网络上运行 Microsoft Windows 的系统之间的基于 Challenge 的验证机制。详细请参考 http://msdn.microsoft.com/en-us/library/aa378749(VS.85).aspx。
Mark Zhou- 已标记为答案 BoberSongModerator 2010年7月21日 7:16
全部回复
-
用 HttpWebRequest.Credentials 设置当前用户的凭据,或者设置 UseDefaultCredentials = true 试试看。如果是计算机在 AD 中,不需要设置凭据既可以实现正常的 NTLM 验证,对于 AD 集成第三方系统 SSO 的案例我没有遇到过,不过可以按照我说的方法试试看。
Mark Zhou- 已标记为答案 BoberSongModerator 2010年7月21日 7:16
-
我把问题简化一下:
假设某用户已经登录到域(AD),此时他打开一个IIS服务器的页面应该是不需要输入密码的;
但如果他使用一个C#编写的客户端程序,去连接这个IIS服务器下载东西,应该要如何写才能够实现这个功能呢?
我之前没有使用域的时候一般都是将用户名和密码放在HTTP头里面发送给服务器:
request = (HttpWebRequest)WebRequest.Create(sUrl);
request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(sUserName + ":" + sPassword)));就想知道换成AD的环境之后,如何才能够让C#程序可以不用提供用户名和密码也能够获取到服务器的数据?
da jia hao! -
如果是访问 Web 资源,利用 WebClient 的话,直接利用:
WebClient wc = new WebClient(...);
WebClient.UseDefaultCredentials = true;就好。它会直接在 HTTP Header 中加 www-authenticate 头标识。HttpWebRequest 也是一样。
NTML 是一种在网络上运行 Microsoft Windows 的系统之间的基于 Challenge 的验证机制。详细请参考 http://msdn.microsoft.com/en-us/library/aa378749(VS.85).aspx。
Mark Zhou- 已标记为答案 BoberSongModerator 2010年7月21日 7:16