
사실을 증명하는 과정
출처 - 옥스퍼드 사전
사용자의 신원을 확인하는 과정입니다. 예를 들자면, 사용자의 이름과 비밀번호와 같이 신원을 확인 할 수 있는 정보를 가지고 자격 증명을 제공합니다.

확인 가능한 권한이 있는지? 확인 하는 것
출처 - 옥스퍼드 사전
인증된 사용자가 어떤 자료에 접근 할 수 있는지 권한을 확인하여 작업을 수행할 수 있는지 정의하는 지에 따라 권한과 역할을 확인합니다.

| Authentication | Authorization |
|---|---|
| 사용자의 자격 증명 | 사용자가 내용을 확인할 권한이 있는지 |
| 로그인, 댓글 게시, 구매 진행 | 게시물 보기, 게시물 삭제, 관리 패널 접근 |
인터넷 표준 인증 방식(RFC 7519)으로 JSON 객체를 통해 사용자 정보를 안전하고 쉽게 암호화(HMAC, RSA, ECDSA를 사용한 공개/비공개 키를 사용) 힙니다.
서명된 토큰과 암호화된 토큰 두 개 다 암호화 통해 비밀 유지가 가능하지만, 서명된 토큰은 요청의 무경성을 검증할 수 있지만, 암호화된 토큰은 다른 당사자가 요청을 확인할 수 없도록 숨길 수 있습니다. 공개키/개인키를 사용해 토큰으로 사용한다면 보안키를 이용해야만 확인 할 수 있으므로 해당 내용을 보증할 수 있습니다.
모든 사용자의 요청에 JWT를 통한 서비스 접근 가능하며 부하가 적고 다른 도메인인 경우에도 사용가능하기 때문에 SSO(Single Sign On) 기능에 주로 활용됩니다.
공개키/개인키를 통한 보안키로 암호화 되었기 때문에 요청자의 신원을 검증할 수 있으며, 헤더와 페이로드를 통해 계산되기에 전송된 콘텐츠가 변조로부터 안전합니다.
- Header 예시
{
"alg": "HS256",
"typ": "JWT"
}
- Payload 예시
**{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}**
- Signature 예시
// 압축을 통해 서명 생성
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
****
JWT는 HTML 및 HTTP 환경에서 쉽게 전달하며 세 개의 점으로 구분된 Base64 URL의 문자열로 구성 되있어, XML과 SAML 기반 보다 간결합니다.
인증에서 자격 증명을 통해 인증에 성공하면 JSON 웹 토큰은 반환됩니다. 토큰으로 증명하는 방법을 통해 보안 이슈를 쉽게 예방할 수 있습니다. 일반적으로 오랬동안 가지고 있지 않아도 됩니다.
사용자가 접근 할 때마다 사용자는 일반적으로 Bearer 구조를 사용하여 Authorization 헤더에서 JWT를 보냅니다.
JWT는 일반적으로 Authorization의 헤더와 Bearer의 구조로 되어있으며 다음과 같이 표시됩니다.
Authorization: Bearer <token>
경우에 따라 상태를 저장하지 않는 권한 부여 구성일 수 있습니다. 서버는 접근시 헤더의 유효성만 확인하고 데이터에 접근 할 수 있게 해줍니다.

JWT에 몇몇 데이터를 같이 보내게 된다면, 데이터 베이스에 접근하지 않아도 데이터를 전달 할 수 있습니다.
보통 토큰의 크기는 8KB 미만의 크기입니다. 그리고 CORS(Cross-Origin Resource Sharing)로 쿠키를 사용하지 않으므로 해당 문제는 없습니다.
SWT(Simple Web Token) 및 SAML(Security Assertion Markup Language Tokens)과 비교할 때 JWT(JSON Web Token) 더 큰 이점을 가지고 있기에 사용합니다.
XML의 형식은 인코딩시에 장황하고, 데이터의 크기도 크지만 JSON은 그렇지 않으며 대칭 서명을 통한 방식으로 구현하기 더 쉬워 보안이 더 강력합니다.
대부분의 프로그램은 map 방식을 통해 JSON 형식을 객체로 변환되기 쉬우며 이는 활용하기 좋게 해줍니다.
aud 요청을 검토하여 토큰이 지정된 수신자에게 발급되었는지 확인합니다.aud 요청을 검토하여 토큰이 지정된 수신자에게 발급되었는지 확인합니다.출처