2017-02-28 2 views
1

문서에 따르면,이는 CORS를 사용하는 데 필요한 유일한 라인 믿는다 반환 된 값 :ServiceStack 자바 스크립트/타이프 라이터 클라이언트와 CORS

프리 플라이트 요청에 대한 응답으로 액세스 제어가 전달되지 않습니다. l 확인 : 응답의 에있는 'Access-Control-Allow-Credentials'헤더의 값은 ''이며 요청의 자격 증명 모드가 '포함'일 때 '반드시'이어야합니다.

모든 기본값을 사용하고 있습니다. 여기서는 JsonServiceClient가 다른 서버를 호출하는 설정에서 누락 된 것이 있습니까?

답변

3

문제가 JsonServiceClient에 있습니다. 생략 할 자격 증명을 설정해야했습니다. 위에서 언급 한 바와 같이

client.credentials="omit"

4

CorsFeature의 기본값에는 자격 증명을 사용할 수 없습니다. 서버를 다음과 같이 변경하십시오.

클라이언트는 전송이 필요한 엔드 포인트를 누르려는 경우 자격 증명을 포함해야합니다.

EDIT : 다른 도메인에서 인증 된 엔드 포인트를 사용하려고 할 때 (여기 있다고 생각합니다), 여기에 내가 동일한 작업을 수행하는 방법이 나와 있습니다. 도메인이 변경되었습니다.

Plugins.Add(new CorsFeature(
    allowCredentials: true, 
    allowedHeaders: "Content-Type, Allow, Authorization, Origin", 
    allowOriginWhitelist: new[] 
    { 
     "https://example.com", 
     "https://api.example.com", 
     "https://www.example.com", 
     "http://dev.example.com" 
    } 
)); 
+0

여전히 작동하지 않습니다 :'프리 플라이트 요청에 대한 응답이 액세스 제어 검사를 통과하지 못합니다 : 응답의 'Access-Control-Allow-Origin'헤더의 값은 요청의 자격 증명 모드 '포함'입니다. 따라서 Origin 'https : /my-app2.azurewebsites.net'은 액세스가 허용되지 않습니다. ' – lucuma

+0

다른 화이트리스트 도메인에서 정답을 사용하는 응답의 예를 업데이트했습니다. –

+0

나는 그것을 또한 시험해 보았다. 나는이 문제를 알아 냈다. CORS 설정이 백엔드가 아니라 프론트 엔드의 JsonServiceClient였다. 나는'client.credentials = "생략"을 설정해야했다. – lucuma

2

나는 서비스를 구성 :

Plugins.Add(new CorsFeature(
     allowCredentials: true, 
     allowedMethods: "GET, POST, PUT, DELETE, OPTIONS", 
     allowedHeaders: "Content-Type, Allow, Authorization, Origin", 
     allowOriginWhitelist: new[] 
      { 
        "http://localhost:4200", 
        "http://localhost:63342", 
        "http://localhost:63342", 
        "http://localhost:3000", 
        "http://my.site.com" 
      })); 

나는이 개 기능을 로그인() 및 GetContacts()

class AppComponent { 
*** 
     constructor(){ 
     this.client = new JsonServiceClient("http://my.site.com"); 
     this.client.credentials = "omit"; 
     } 

     async Login(){ 

     var auth = new wbs.Authenticate(); 
     auth.UserName = this.username; 
     auth.Password = this.password; 

     var authResponse = await this.client.post(auth); 

     console.log(authResponse); 
     } 

     async GetContacts(){ 
     try { 
      this.contacts = await this.client.post("Contacts_Get"); 
      console.log(this.contacts); 
     } catch(e) { 
      this.contacts = []; 
      console.log("Failed to get:", e.responseStatus); 
     } 
     } 
} 

"servicestack 클라이언트"가 " 0.030 ",

이러한 함수를 차례로 호출합니다.

1. Login() 
2. ContactsGet() 

로그인은 정상적으로 실행되지만 Internet Explorer 및 Safari ContactsGet은 실패하지만 상태 401을 반환하지만 Chrome에서 작동합니다.

제발 내 실수로 안내는? 감사합니다.

enter image description here

enter image description here

enter image description here

UPDATE

IIS 설정

enter image description here

+0

@Layoric이 게시물을 참조하십시오. –

+0

기본적으로 쿠키가 포함 된 [servicestack-client] (https://github.com/ServiceStack/servicestack-client)의 최신 버전 v0.0.36으로 업그레이드하십시오. – mythz

+0

@mythz 클라이언트를 최신 버전으로 업데이트했습니다. IIS Express에서 로컬로 실행하면 작동하지만 IIS 서버에 배포하면 작동하지 않습니다. 문제의 업데이트를 참조하십시오. –