2015-01-20 8 views
0

에 JQuery와 통화 나는 foo.aspx 페이지의 코드 숨김 앉아, ASP.NET 웹 양식에서의 WebMethod이와 오류"인증에 실패했습니다. System.InvalidOperationException "간헐적으로 WEBMETHOD

[WebMethod] 
    public static String foo() 
    { 
     return ""; 
    } 

내가

 $.ajax({ 
      type: "POST", 
      url: '<%= ResolveUrl("foo.aspx/foo")%>', 
      data: JSON.stringify(dataToServer), 
      contentType: "application/json; charset=utf-8", 
      success: function (data) { 
       // work with data here 
      } 
     }); 
jQuery를

사용하여 호출

그리고이 서버로부터 응답 헤더이다

Request 
Request Method:POST 
Status Code:401 Unauthorized 
2:2 
Cache-Control:private 
Content-Length:105 
Content-Type:application/json; charset=utf-8 
Date:Tue, 20 Jan 2015 04:40:36 GMT 
jsonerror:true 
Server:Microsoft-IIS/7.5 
X-Powered-By:ASP.NET 

응답 본체

012,351,
{"Message":"Authentication failed.","StackTrace":null,"ExceptionType":"System.InvalidOperationException"} 

배경 정보

  • 내가 그렇게 AutoRedirectMode을 = 켜지거나 꺼 저를 제안하지 마십시오 ASP.NET 친화적 인 URL을 사용하지 마십시오.
  • 내 사이트에서 WebApi를 사용하고 있는데, 과 관련된 내용인지 확실하지 않습니다. 여기 내 라우팅 구성

    RouteTable.Routes.MapHttpRoute(
         name: "DefaultApi", 
         routeTemplate: "api/{controller}/{action}/{name}" 
        ); 
    
    
        RouteTable.Routes.MapHttpRoute(
          name: "DefaultApiNoParameter", 
          routeTemplate: "api/{controller}/{action}" 
        ); 
    
  • 내가 다른 ASP.NET 응용 프로그램 내에서 하위 응용 프로그램으로 호스팅 구축 사이트입니다. 그래서 내 응용 프로그램 막대를 호출하자. 도메인 foo.com에서 foobar 내에서 호스팅되므로 http://foo.com/foobar/bar입니다. 때로는 여러 번 새로 고침을 한 후 브라우저에 "사이트 http://foo.com:80은 암호를 입력해야합니다."라고 표시됩니다. 모든 사이트에 익명 인증을 사용하고 폼 인증을 사용하도록 설정하고 다른 인증을 사용하지 않도록 설정합니다.

  • 이것은 나의 web.config 인증 설정입니다. 응용 프로그램은 공개이며, foo.aspx는 개인이며 암호는 입니다.

  • <authentication mode="Forms"> 
        <forms name="cookie" loginUrl="login.aspx" defaultUrl="foo.aspx"> 
        <credentials passwordFormat="SHA1"> 
        <user name="foo" 
          password="xxxxxxxx"/> 
        <user name="bar" 
          password="xxxxxxxxx"/> 
        </credentials> 
        </forms> 
    </authentication> 
    
    응용 프로그램

    는 단일 웹 서버와 테스트 환경에서 잘 작동합니다. 웹 팜에 배포 할 때만이 문제가 발생합니다.

  • 간헐적으로 오류가 발생하며 경우에 따라 요청이 작동하는 경우가 있습니다. 몇 번 페이지를 새로 고침하면 자동으로 로그 아웃됩니다.

답변

1

응용 프로그램이 단일 웹 서버로 테스트 환경에서 올바르게 작동합니다. 웹 팜에 배포 된 경우에만이 문제가 발생합니다.암호화/복호화 키 당신이 있는지 확인해야합니다 암호를 해시 SHA1를 사용하는 경우 모든 인스턴스

에 걸쳐 일치하지 않는 경우에

이 일반적으로 발생하는 웹 사이트 공유의 모든 인스턴스 같은 그 machineKey 해시 알고리즘이 암호를 올바르게 해싱 할 수 있도록합니다. 사용자가 예를 들어, web.config 파일에 각각 키를 추가하여 그 달성

... ...key 값과 관련된 machineKey 소자의 MSDN 설명서에서 인용

<machineKey decryption="AES" 
      validation="SHA1" 
      decryptionKey="22B83C3D43B0BA0E2" 
      validationKey="1C059088E7E510C83650449D8D6567B2" /> 

...

수동으로 할당 된 키를 지정합니다. 웹 팜에서 일관된 구성을 유지하려면이 값을 16 진수 문자열로 수동 설정해야합니다. Triple DES (3DES) 또는 AES 암호화를 사용할 때 길이의 16 진수 16 진수 및 길이의 48 진수 16 진수 여야합니다. 최대 길이가 인 키를 사용하는 경우에는 클래스를 사용하는 것과 같이 키를 진정한 무작위 방법으로 생성해야합니다. ASP.NET은 128 비트 암호화를 사용할 수있는 컴퓨터에서만 Triple DES를 사용할 수 있습니다. 정보에 대한

그래서 나는 내가 지우기 암호 권리를 사용하는 경우 machineKey을 유지하기 위해 필요가 없습니다 MSDN

+0

에서 찾을 수 있습니까? – Quannt

+1

@Quannt no 일반 텍스트로 구성하면이 기능 만 사용할 수 있습니다. ASP.NET에서 기본 암호화 및 암호화 작업을 수행해야하는 다른 기능 (예 : viewstate는 암호화를 사용하여 암호화 됨)이 있기 때문에 웹 팜 및로드 균형 조정 된 인프라에 배포 할 때 machineKey 요소를 지정하는 것이 좋습니다. 열쇠 – Leo

+0

감사합니다 @ 레오! 대단히 감사합니다. – Quannt

관련 문제