인트라넷 MVC.NET 웹 사이트가 있습니다. MySite이라고 부르 자. 에서 MySite 다른 인트라넷 웹 사이트로 웹 요청을 보내려고합니다. 다른 웹 사이트로 전화하십시오. OtherSite. 두 웹 사이트는 모두 동일한 도메인에 있으며 IIS에서 실행됩니다. 두 웹 사이트가 사용하는 :다른 서버에 웹 요청을 할 때 가장 문제가 발생합니다.
<authentication mode="Windows" />
<authorization>
<allow verbs="OPTIONS" users="*" />
<deny users="?" />
</authorization>
내 사이트은 웹 브라우저 (크롬, IE)와 인증 된 사용자 (동일한 도메인)에 의해 액세스 할 수 있습니다. 해당 사용자 고객으로 전화를 걸자. 클라이언트의 자격 증명 MySite기타 사이트을 사용하는 경우 클라이언트을 사용해야합니다. here을 제안, WebClient
와
var request = WebRequest.CreateHttp(uri);
request.Credentials = CredentialCache.DefaultCredentials;
request.ImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
var response = request.GetResponse();
return response;
;
WebRequest
으로 :
나는 다음과 같은 시도
와 주변이 코드없이 모두using (var client = new WebClient { UseDefaultCredentials = true })
{
client.Headers.Add(HttpRequestHeader.ContentType, "application/json; charset=utf-8");
var data = client.DownloadData(uri);
return data;
}
는 :
var wi = (System.Security.Principal.WindowsIdentity)HttpContext.Current.User.Identity;
var wic = wi.Impersonate();
try
{
// Code for making request goes here...
}
catch (Exception exc)
{
// handle exception
}
finally
{
wic.Undo();
}
나는 내 사이트의 Web.config에 함께하고 <identity impersonate="true" />
없이 시도했습니다.
는 최대한 빨리이 클라이언트를 가장하려고으로 나는 401
에서 OtherSite를 얻을. 그리고 IIS 로그에서 OtherSite 로그를 확인하면 자격 증명이 요청과 함께 전달되지 않는 것처럼 보입니다.
사용자를 가장하지 않으면 모두 잘됩니다. 그러나 가장하려고하면 실패하고 401
을 반환합니다. Active Directory에서 어떤 작업을해야합니까? 나는 답변이 위임 인 this question을 보았습니다. 그게 문제 야? 가장 할 때 401
의 이유는 무엇입니까? OtherSite에
IIS에서 로그는 내가 가장 할 때 다음과 같습니다
2016-10-19 07:33:26 2a01:9080:700:0:3fe7:b92a:552:1246 GET /odata/$metadata - 80 - 2a01:9080:700:0:8d90:4bc0:2ffd:d088 - - 401 0 0 0
2016-10-19 07:33:26 2a01:9080:700:0:3fe7:b92a:552:1246 GET /odata/$metadata - 80 - 2a01:9080:700:0:8d90:4bc0:2ffd:d088 - - 401 1 2148074252 0
내가 가장하지 않을 때 그들은 다음과 같이 :
2016-10-19 07:57:11 2a01:9080:700:0:3fe7:b92a:552:1246 GET /odata/$metadata - 80 MyDomain\SVC_ServiceAccount1 2a01:9080:700:0:8d90:4bc0:2ffd:d088 - - 200 0 0 0
2016-10-19 07:57:11 2a01:9080:700:0:3fe7:b92a:552:1246 GET /odata/$metadata - 80 MyDomain\SVC_ServiceAccount1 2a01:9080:700:0:8d90:4bc0:2ffd:d088 - - 200 0 0 0
나는 서비스 계정을 가지고 위의 로그에 MyDomain \ SVC_ServiceAccount1이라는 응용 프로그램 풀이 있습니다. 실제 이름은 다른 것입니다 ...
(주의 내가 사용 HttpClient를하지만), 사용자는 Kerberos 또는'을 사용하여 인증해야 auth/plaintext'라고합니다. Kerberos 인 경우 IIS 프로세스를 "위임에 대해 신뢰할 수 있어야합니다." – Ben
@Ben, 감사합니다. 시도해 볼게. – smoksnes