2016-11-15 1 views
3

각 요청에 JWT를 추가하려면 auth0/angular2-jwt 라이브러리를 사용하고 있습니다.HTTP 요청의 Angular2 Set-Cookie JSESSIONID

각 요청마다 JSESSIONID 쿠키를 어떻게 추가 할 수 있는지 알고 싶습니다. 서버 쪽 세션에 도달 했습니까?

좋은 방법입니까?

내가 성공하지

let myHeader = new Headers(); 
myHeader.append('SET-COOKIE', 'JSESSIONID=<jsessionid>'); 

this.authHttp.get(endpoint, {headers: myHeader, withCredentials: true}).map(res => res.json()).subscribe(
    jwt => { 
    ... 
    },err => console.log(err)); 

답변

8

것이 좋습니다 이것을 시도했습니다?

아니요, 좋지 않습니다. JWT의 문서에서

: 인증에서

, 사용자가 성공적으로 자격 증명을 사용하여 로그인하는 JSON 웹 토큰이 반환되며 (일반적으로 로컬 저장소에 로컬로 저장해야하지만, 쿠키가 될 수 있습니다 또한 대신) 서버에서 세션을 만들고 쿠키를 반환하는 전통적인 방식을 사용했습니다.

참조 : https://jwt.io/introduction/https://jwt.io/introduction/

JSESSIONID 당신은 브라우저에 저장된 쿠키 여러 종류가 있다는 것을 알 필요가

. 대부분 JS 코드에서 액세스 할 수 있지만 일부는 httpOnly입니다. 이는 브라우저가 JS 코드에 대한 모든 요청에 ​​투명하게 추가 할 수 있음을 의미합니다 (코드에 쿠키가 표시되지 않음). 서버 측에 기본 구현 인 JSESSIONIDhttpOnly 쿠키의 예입니다. 이러한 종류의 디자인에는 여러 가지 보안상의 이유가 있습니다. 페이지의 JS 멀웨어가 클라이언트의 세션을 도용 할 수 없습니다.

헤더

myHeader.append('SET-COOKIE', 'JSESSIONID=<jsessionid>');

을이 서버에 쿠키를 전달하는 올바른 방법은 아니다. 이것은 클라이언트에 응답을 보내고 클라이언트에 쿠키를 설정하는 올바른 방법입니다. 쿠키를 전달하려면 다음을 사용할 수 있습니다.

myHeader.append('Cookies', 'JSESSIONID=<jsessionid>'); 

그래도 작동하지 않습니다. 브라우저가 어쨌든 자체를 추가합니다. 즉, JSESSIONID이 자동으로 추가되어야합니다. 브라우저가 요청한대로입니다. 이 방법으로 작동하지 않는 경우 브라우저에서 쿠키가 설정되지 않았거나 (Chrome 개발자 도구 확인, 애플리케이션 탭에서 쿠키를 볼 수 있음) 또는 앱과 다른 포트/서버/프로토콜에서 원격 서버를 사용 중입니다 (그 다음 CORS가 들어와이 경우 앱을 망가 뜨린다).