더 이상 추측하지 마라: 무엇이 JWT입니까?

더 이상 추측하지 마라: 무엇이 JWT입니까?



JSON 웹 토큰(JWT)


JWT는 개방적인 표준으로 RESTAPI에서 인증을 수행하는 데 사용되는 촘촘하고 자체적으로 포함된 방식을 정의하는데 그 중에서 정보는 JSON 대상으로 쌍방 간에 안전하게 전송된다.
이 정보는 디지털 서명을 거쳤기 때문에 이를 검증하고 신뢰할 수 있다.JWT는 비밀(HMAC 알고리즘 사용)이나 RSA의 공개 키/개인 키를 사용하여 서명할 수 있습니다.
참고 1: URL, POST 매개 변수 또는 HTTP 헤더를 통해 전송할 수 있는 크기가 매우 작다고 생각합니다.그 밖에 사이즈 때문에 전송 속도가 매우 빠르다.
주2: 우리는 그것이 자체적으로 포함된다고 생각한다. 왜냐하면 우리는 데이터베이스를 여러 번 조회할 필요가 없기 때문이다. 유효 부하는 사용자에 대한 모든 필요한 정보를 포함한다.

언제 JWT를 사용합니까?


인증: 사용자가 로그인하면 다음 요청마다 JWT가 포함됩니다.이것은 사용자가 이 영패가 필요한 루트, 서비스, 자원에 접근할 수 있도록 한다.
정보 교환: JWT는 각 방면에서 정보를 전송하는 안전한 방식입니다. 송신자가 그들이 말한 사람인지 확인할 수 있습니다. 왜냐하면 그들은 서명할 수 있기 때문입니다. (공개 키/개인 키 쌍을 사용할 수 있습니다.)서명은 헤더와 부하로 만들어졌기 때문에 내용이 변경되지 않았음을 검증할 수 있습니다.

JWT 구조


JWT는 점(.)으로 구분되는 세 부분으로 구성됩니다.헤더, 유효 부하와 서명.이 부분들은 다음과 같은 구조를 따른다: xxxx.YYYY.zzzzz.

제목


일반적으로 영패 유형 (즉, JWT) 과 해시 알고리즘 (예: HMAC, SHA256 또는 RSA) 을 포함합니다.
그리고 이 헤더를 포함하는 JSON에 대해 Base64Url 인코딩을 해서 JWT의 첫 번째 부분을 형성한다.
//Example of a Header
{
  "alg": "HS256",
  "typ": "JWT"
}

유효 하중


엔티티 (일반적으로 사용자) 및 기타 메타데이터에 대한 설명을 포함합니다.
주의: 비밀번호와 같은 사용자에 대한 합리적인 정보를 포함할 수 없지만 사용자 id, 이름, 전자메일을 포함할 수 있습니다.
클레임 예시: iss(발행인), exp(만기시간),sub(주제),aud(관중) 등.
그리고 유효 부하를 포함하는 JSON에 대해 Base64Url 인코딩을 해서 JWT의 두 번째 부분을 형성한다.
//Example of a Payload
{
  "sub": "0987654321",
  "name": "Jane Doe",
  "admin": true 
}

서명


JWT의 발송자가 그들이 주장하는 사람인지 확인하고 메시지가 전송될 때 변경되지 않았는지 확인합니다.
서명을 만들려면 인코딩의 헤더, 인코딩의 유효 부하, 비밀, 헤더에 지정된 알고리즘을 가져와 서명하십시오.
//Example of a Signature using the HMAC SHA256 algorithm
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)
주의: 비밀을 생성하는 간단한 방법은 http://www.md5.cz/ 문자열을 생성하는 MD5 해시를 사용하는 것이다.

이 세 부분을 결합시키다


출력은 점으로 구분된 세 개의 Base64 문자열입니다. 인코딩 헤더, 인코딩 유효 부하, 비밀 서명입니다.HTML 및 HTTP 환경에서 전송할 수 있습니다.

주의: jwt로 이동합니다.io, JWT를 디코딩, 검증 및 생성할 수 있는 사이트입니다.

JWT는 어떻게 일합니까?


1 - 사용자가 자격 증명을 사용하여 인증에 성공적으로 로그인하면 JWT로 돌아갑니다.


주의: 영패는 증거이기 때문에 안전 문제를 방지해야 합니다. 영패의 보존 시간은 요구를 초과하지 마십시오.
2 - 사용자가 보호된 루트에 접근하고자 할 때마다 요청은 JWT를 보내야 합니다. 보통 권한 수여 헤더에서 마운트 모드를 사용합니다: Authorization: Bearer.

참고 이 인증 메커니즘은 서버 메모리에 사용자 상태가 저장되지 않았기 때문에 무상태입니다.반대로 서버의 보호 루트는 권한 수여 헤더에서 유효한 JWT를 검사하고 이 조건을 충족시킬 때만 사용자를 허용한다.따라서 jwt는 자체적으로 포함되어 있기 때문에 데이터베이스를 여러 번 조회할 필요가 없기 때문에 필요한 모든 정보를 갖추고 있다.

왜 JWT를 사용해야 합니까?


  • 그것들은 무상태이다. 영패는 자체로 포함되어 있기 때문에 신분 검증에 필요한 모든 정보를 가지고 있다.서버가 세션 상태를 저장할 필요가 없기 때문에 확장성이 좋습니다.

  • 그것들은 어디에서든 생성할 수 있다. 영패 생성과 영패 검증은 결합된 것이다.이것은 당신이 단독 서버에서 영패의 서명을 처리할 수 있도록 합니다.

  • 액세스 제어를 허용합니다: 유효 부하 내에서 사용자 역할과 권한을 지정할 수 있습니다.사용자가 액세스할 수 있는 리소스를 정의할 수도 있습니다.
  • 모범 사례


  • 영패를 만료시킵니다. 영패가 서명되었을 때, 서명 키를 변경하거나 현식 설정이 만료되지 않는 한 영패는 영원히 만료되지 않습니다.이것은 잠재적인 문제를 가져올 수 있기 때문에 영패 기한 만료 및/또는 취소 전략을 제정할 필요가 있다.

  • 민감한 데이터를 유효 부하에 저장하지 마십시오. 영패는 쉽게 디코딩할 수 있습니다. 그 목표는 서명이 조작되지 않도록 보호하는 것입니다.따라서 유효 부하에 필요한 수량의 성명을 추가하면 가능한 한 최상의 성능과 안전성을 얻을 수 있다.

  • 좋은 마술사가 되어라. 당신의 비밀을 누설하지 마라. 서비스가 정말 필요한 서명 키만 누설해라.다른 어떤 증거물처럼 대해야 한다.

  • HTTPS 이용: 비HTTPS 연결에서 요청이 차단되고 영패가 파괴되기 쉽습니다.
  • 연락 유지


    내 소셜 미디어를 통해 나에게 연락해라.안전성, 신분 검증, 프로그래밍에 대해 토론합시다.
    당신이 제창한 JWT의 양호한 실천을 우리와 공유합니다.

    좋은 웹페이지 즐겨찾기