견적 및 제품문의 : sales@opennaru.com
02-469-5426
분류 전체보기 (129)
오픈나루 소식 (2)
Techie Talk (5)
오픈소스 뉴스 (15)
JBoss EAP (39)
클라우드 (3)
No SQL (12)
UI (1)
Azul Zing (5)
KHAN (25)
BRMS (2)
EAI (2)
Load Test (1)
Java Troubleshooting (3)
Security (1)
Database (1)
docker (10)
memory
memory
href="http://eliteanus.ru/stra..
오픈나루 - Cen..
410,163 Visitors up to today!
Today 6 hit, Yesterday 77 hit
daisy rss
tistory 티스토리 가입하기!
2014.10.16 09:51

HTTP 프로토콜은 상태를 보관할 수 없기 때문에 로그인한 정보를 보관하기 위해서는 세션과 쿠키를 사용합니다.

서버쪽에서는 세션에 정보를 보관하고, 브라우저에는 쿠키를 구워 놓습니다. 쿠키는 보안문제로 디스크에 저장하진 않고, 브라우저가 켜져있는 동안에만 메모리에 보관하죠. 그래서 세션과 쿠키를 가지고 사용자의 정보를 비교하여 처리하게 됩니다.


하지만 사이트가 복잡해지면 몇가지 문제들이 발생합니다.

  • CSRF(Cross-Site Request Forgery, XSRF) : 사이트간 요청 위조, 공격에 방어할 수 있도록 해야 합니다.
  • CORS(Cross-origin resource sharing)을 쿠키와 같이 사용하려면 또 어려운 점이 많습니다.
  • 모바일 : Native 모바일 애플리케이션들은 쿠키를 사용할 때 문제가 발생합니다. API를 호출하여 사용하기도 합니다.
  • Session : 일반적으로 서버 메모리에 보관합니다. 확장에 한계가 있을수 있겠죠.


JWT(JSON Web Token)을 사용하시면 이런 어려운 문제들을 쉽게 해결할 수 있습니다. 정확히 하자면, 인증 토큰을 사용하는 방식을 사용하면 단순해 진다는 것입니다.

한글로 표기하자니...발음이... JOT 이라고 발음합니다.


JSON Web Token (JWT)는 메시지를 전송할 대상간의 요청을 표현하는 URL safe한 방식입니다. JWT에서 요청은 JSON 오브젝트로 인코딩로 JSON Web Signature(JWS)를 사용하여 디지털 서명합니다.

토큰 방식으로 구현하면 여러 장점을 얻을 수 있겠죠. 아래 블로그에서 장점을 잘 설명하고 있습니다.

https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/


JWT에서 토큰은 헤더, payload, 서명으로 구성됩니다.


  • 헤더 : 암호화 알고리즘 

{

  "alg": "HS256",

  "typ": "JWT"

}

  • Payload : 전송할 내용

{

  "sub": 1234567890,

  "name": "Opennaru, Inc.",

  "admin": true

}


위 JSON 메시지는 아래와 같이 암호화되어 인코딩됩니다.

각 영역이 '.'으로 구분되어 있죠. 

XXXXX.YYYYY.ZZZZZ ==> [Header].[Payload].[Signature]

  • 인코딩된 내용

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOjEyMzQ1Njc4OTAsIm5hbWUiOiJPcGVubmFydSwgSW5jLiIsImFkbWluIjp0cnVlfQ.9H_3lbp1Tt3t05r0jZ_ue_PcE1_T1OfIYSHPId6prD8


이런 형태로 출력되기 때문에, URL의 파라미터에 값을 넣어서 사용하실 수 있습니다.

JWT는 인증 토큰을 전달하는데 사용합니다. SAML(Security Assertion Markup Language)과 같이 SSO(Single Sign On)을 구현하는데 사용하고 있습니다. 

아무래도 JSON기반으로 더 단순하기 때문에, SAML보다는 훨씬 간단히 사용할 수 있습니다. OAuth 2.0에서 JWT Bearer Token Flow를 사용할 수 있습니다.


다양한 언어에서 JWT를 지원하고 있습니다.

http://jwt.io/에서 언어별 JWT 라이브러리 현황을 확인할 수 있습니다.


참고자료 :

https://tools.ietf.org/id/draft-ietf-oauth-json-web-token-28.html

https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/

*  http://jwt.io/



'Security' 카테고리의 다른 글

JWT(JSON Web Token) - JOT을 아시나요?  (0) 2014.10.16
Name
Password
Homepage
Secret