2012-06-16 8 views
0

IIS Express에서 실행중인 웹 응용 프로그램에서 인트라넷 웹 서비스에 연결하려고 시도하면 웹 서비스는 403 Forbidden을 반환합니다. 단위 테스트를 통해 또는 Cassini 또는 IIS 7.5에서 내 서버에서 실행중인 동일한 사이트에서 액세스 할 때 서비스가 올바르게 작동합니다. 내 직감은 이것이 구성 문제라고 말하지만, 어디서부터 시작해야할지 모르겠습니다.IIS Express에서 원격 웹 서비스에 액세스하면 403이 금지됩니다.

IIS Express에서 실행되는 사이트에서 원격 웹 서비스가 해당 서비스에 액세스 할 때 403 금지됨을 반환하게하는 원인은 무엇입니까?

내가 액세스하고있는 서비스를 명확히하기 위해 SOAP 기반이 아닙니다. 특정 네트워크 인증 정보를 설정하고 아래 요청 코드와 함께 전달합니다.

protected XDocument Search(Uri requestUri) 
{ 
    var nc = new NetworkCredential(this.config.ServiceUserName, 
     this.config.ServicePassword); 
    var cCache = new CredentialCache(); 
    cCache.Add(requestUri, "Basic", nc); 

    var request = (HttpWebRequest)HttpWebRequest.Create(requestUri); 
    request.Credentials = cCache; 
    request.PreAuthenticate = true; 
    request.Method = WebRequestMethods.Http.Get; 

    var response = (HttpWebResponse)request.GetResponse(); 
    return XDocument.Load(new StreamReader(response.GetResponseStream())); 
} 
+0

시작 : 귀하의 cassini 앱이 사용자 ID로 실행되고있을 가능성이 큽니다. 반면에 IIS Express는 아마도 다른 Windows ID로 실행 중일 것입니다. 아마 IUSR (나는 IIS Express를 모른다). 원격 서비스는 아마도 Windows 인증을 사용하며 익명 액세스를 허용하지 않습니다. 따라서 원격 서버의 IIS vdir에서 IIS Express (컴퓨터 \ IUSR, 컴퓨터는 IIS Express를 실행하는 컴퓨터의 이름)의 ID에 사용 권한을 부여해야합니다. – Cheeso

+0

@Cheeso 내 질문에 코드를 게시해야합니다. 나는 인증을 제공하고 있으므로 혼란 스럽다. – ahsteele

답변

0

지금 당장 왜 그런지 알아낼 시간이 없지만 프록시 설정과 관련이 있다고 말할 수 있습니다. 내 상자의 다른 프록시 공급자로 전환하면 문제가 완화되었습니다. 이 내부 트랜잭션은 프록시를 모두 우회해서는 안되며 IIS가 다른 메커니즘과 다르게 작동하는 이유는 저 밖에 있습니다. 끝으로 나는 이것을 답으로 표시하고 프록시 설정을 확인하는 작은 알림이 누군가를 돕기를 바랍니다. 미안하지만 더 구체적인 것은 아닙니다.

0

웹 서비스 '측면에서 Windows 인증의 경우 당신은 /로 실행됩니다되는 문제 목록 : Cheeso는 지적

  • 당신의 reqest은 단순히 익명에서 실행 (또는 로컬이 될 수) 계정. 이것은 사용자 호출의 가장없이 실행되고 프로세스 자체가 잘못된 계정에서 실행되거나 사용자가 익명으로 간주되어 요청이 해당 로컬의 "익명"계정으로 전환 되었기 때문일 수 있습니다.
  • "NTLM one hop hell"문제로 들어오는 사용자의 명의도 사용 설정으로 위의 문제를 해결할 때 - 들어오는 자격 증명을 다른 서버에서 사용할 수 없습니다 (Kerberos는 해결책이지만 대부분의 경우 사용할 수 없을 것입니다). 사례).
  • 가장을 사용하지 않도록 설정하거나 (들어오는 사용자 계정 대신 프로세스 '계정에서 코드 실행) 도메인 계정 (또는 실제로 웹 서비스 사용 권한이있는 다른 계정)에서 프로세스가 실행되도록하여 첫 번째 문제를 해결할 때 실제로 사용자가 액세스 할 수 없도록하는 데이터를 얻을 수있는 가능성을 열어 놓을 수도 있습니다.

기본적으로 웹 서비스에 액세스 할 수있는/액세스해야 할 계정과 해당 계정에서 웹 서비스를 인식하는 코드를 실행해야합니다. 계정은 로컬로 로그인해야합니다 (수신 사용자의 신원 정보는 사용할 수 없음).

+0

액세스하려는 서비스가 다른 서버에서 실행 중입니다. 내 질문에 액세스하는 방법을 나타내는 코드를 추가했습니다. 이 코드는 인증하고자하는 사용자의 NetworkCredential을 제공합니다. 나는 요청을 할 때 가장 (impersonation)이 작용했다고 생각하지 않았습니다.하지만 나는 대답에서 뭔가를 오해 할 수 있습니다. – ahsteele

+0

내 답변은 현재 귀하의 사례와 관련이 없습니다 : Windows 인증을 가정하고 있지만 서비스가 샘플 코드를 기반으로 기본 인증을 사용합니다. 아니, 왜 작동하지 않는지 모르겠다. –

관련 문제