我的ASP.NET Web应用程序在我们的Intranet上使用Windows身份验证。我希望它能够向同一域上的另一台服务器发出服务器端http请求,该服务器也需要Windows身份验证。
我已按照有关在此处发出附加请求时临时模拟经过身份验证的用户的说明操作:
http://msdn.microsoft.com/en-us/library/ff647404.aspx
使用这样的代码:
using System.Security.Principal;
// Obtain the authenticated user's Identity
WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity;
WindowsImpersonationContext ctx = null;
try
{
// Start impersonating
ctx = winId.Impersonate();
// Now impersonating
// Access resources using the identity of the authenticated user
var request = WebRequest.Create("http://intranet/secureapp");
request.Credentials = CredentialCache.DefaultCredentials;
var response = request.GetResponse();
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
Response.Write(streamReader.ReadToEnd());
}
}
// Prevent exceptions from propagating
catch
{
}
finally
{
// Revert impersonation
if (ctx != null)
ctx.Undo();
}
// Back to running under the default ASP.NET process identity
但是,不幸的是,我总是得到401未经授权的错误。
我是否需要使用活动目录配置我们的网络服务器,以允许它委派认证用户(可能是大约200个用户中的任何一个,所以不想要做200次任何事情:))?如果是这样,谁能告诉我怎么做?
答案 0 :(得分:3)
使用Windows配置Kerberos / Delegation有几个步骤。
首先,您需要配置ASP.NET以使用委派。我假设你在web.config中配置了这个。
然后,您需要配置ASP.NET服务帐户以进行委派。有时你必须创建一个SPN。
然后为IIS服务器和Active Directory中的帐户启用委派。
此处提供了分步说明:http://msdn.microsoft.com/en-us/library/ms998355.aspx 按照步骤1-3进行操作。
答案 1 :(得分:-1)