JSON Web 토큰(JWT) 및 이를 사용하는 이유는 무엇입니까?

그래서 나는 우리가 어떻게 Turtlemint에서 JWT를 사용하는지 이야기하고 싶다.JWT가 뭐냐고요?JSON WebToken(JWT)은 개방된 표준(RFC 7519)으로 각 분야에서 JSON의 대상으로 정보를 안전하게 전송하는 데 사용된다. 
처음부터 데려다 줄게.

인증 및 인증


신분 검증은 기본적으로 사용자가 로그인할 때 발생하는 일이다.우리는 사용자의 일부 증명서(예를 들어 사용자 이름/비밀번호)에 근거하여 사용자의 신분을 검사한다.다른 한편, 상술한 검증 사용자가 특정 흐름에 접근할 수 있는지 권한을 부여한다.

현재, 나는 신분 검증 절차의 모든 세부 사항을 깊이 있게 토론할 생각은 없지만, 유니버설 로그인 폼은 가장 간단한 예이다. 이 예에서 클라이언트 (예를 들어 브라우저) 는 이것이 실제 사용자라는 것을 알고 상세한 정보를 얻는다.사용자와 시스템의 매번 후속적인 상호작용을 계속 검증하는 것은 의미가 없다. 왜냐하면 이것은 추가 처리 시간을 증가시킬 수 있기 때문이다.시간은 돈이라는 속담이 있다.따라서 우리는 신분 검증을 한 다음에 특정한 데이터를 저장하고 이 데이터에 따라 후속적인 상호작용을 권한을 부여한다. 
이 권한 수여 흐름을 사용하는 가장 간단한 해결 방안은 세션 기반 인증입니다.이 경우 서버는 사용자가 로그인한 후에 사용자를 위한 세션을 생성합니다.그리고 세션 id는 사용자 브라우저의 쿠키에 저장됩니다.사용자가 로그인 상태를 유지할 때 쿠키는 다음 요청과 함께 발송됩니다.그리고 서버는 쿠키에 저장된 세션 id와 메모리에 저장된 세션 정보를 비교하여 사용자의 신분을 검증하고 해당하는 상태의 응답을 보낼 수 있습니다!시스템을 확장할 때, 이것은 분명히 최선의 해결 방안이 아니며, 상태가 있는 실현을 초래한다. 이 실현에서, 우리는 서버에 의존하여 모든 요청을 검증한다.

듣기에 괜찮다.JWT는 이것과 무슨 관계가 있습니까?


잘 물었습니다.따라서 JWT처럼 영패에 기반한 신분 검증은 더욱 확장성 있는 해결 방안이다. 왜냐하면 JWT는 무상태이기 때문이다.이것은 사용자 상태가 서버 메모리에 저장되지 않고 클라이언트 자체의 영패에 저장된다는 것을 의미한다.이러한 JWT를 요청과 함께 다른 사람에게 전송함으로써 시스템을 더욱 안전하게 할 수 있습니다.인증 및 승인 프로세스를 빠르게 실행하도록 하겠습니다.
  • 먼저 사용자는 인증 키(사용자 이름/비밀번호 쌍, 페이스북 키, 구글 키 또는 다른 계정의 키)로 인증 서버에 로그인한다.
  • 인증 서버가 JWT를 만들어 사용자에게 전송합니다.
  • 사용자가 응용 프로그램 API에 요청을 하면 이전에 받은 JWT를 응용 프로그램 API에 추가합니다.
  • 사용자가 API 요청을 할 때 프로그램은 요청 중인 JWT를 사용하여 사용자가 자신이 주장하는 사람인지 확인할 수 있다.이 방안에서 응용 서버는 전송된 JWT가 인증 서버에 의해 만들어졌는지 검사할 수 있도록 설정됩니다. (이따가 검증 과정을 더욱 상세하게 설명할 것입니다.)
  • 읊다, 읊조리다🤔 그럼 JWT는 어떤 모습일까요?


    JSON 웹 토큰은 마침표로 구분된 3부로 구성됩니다.
    header.payload.signature
    

    타이틀


    머리에는 일반적으로 두 가지 세부 사항만 포함된다. 그것이 바로 영패의 유형 (본 예는 JWT) 과 영패가 사용하는 해시 알고리즘, 예를 들어 RSA, HMAC, SHA256 등이다.기본적으로 HS256이 사용됩니다.
    {
     "alg": "HS256",
     "typ": "JWT"
    }
    

    페이로드


    사용자와 관련된 실제 데이터가 바로 우리가 말한 클레임이다.이러한 클레임은 세 가지 유형으로 나눌 수 있다.
  • 보류 성명: 이것은 일부 미리 정의된 성명으로 강제적인 것이 아니지만 사용을 권장합니다.이것은 응용 프로그램이 영패의 진실성을 판단하는 데 도움이 된다.iss(발행인),exp(만기시간),sub(주제),aud(관중) 등이 포함된다.전체 목록 선택 가능here
  • 공개 성명: 이 성명들은 JWTs를 사용하는 사람이 마음대로 정의할 수 있다.문제를 방지하려면 IANA JSON Web 토큰 레지스트리에 정의해야 합니다.Here는 공공 클레임에 대한 더 많은 정보입니다.
  • 개인 성명: 이러한 사용자 정의 성명은 그들의 사용에 동의하는 각측 간에 정보를 공유하기 위해 만들어진 것이다.예를 들어 직원 ID와 부서 이름 등 특정 값.
  • 다음 코드 세션에서 서로 다른 형식의 성명이 사용되는 것을 볼 수 있습니다. 이 중 iss는 보존 성명이고,name는 공공 성명이며,admin은 개인 성명입니다.
    {
      [...]
      "iss": "https://rohitjmathew.space",
      "name": "Rohit Jacob Mathew",
      "admin": false
    }
    

    REMEMBER: Do not put large data in claim sets. Claim sets are meant to be compact. Also, do not put sensitive information, since JWT can be decoded easily.


    서명하다.


    서명은 JSON 웹 토큰(JWT)의 가장 중요한 부분입니다.Base64url 인코딩을 사용하여 헤더와 유효 부하를 인코딩하고 문장 구분자를 사용하여 연결한 다음 암호화 알고리즘을 통해 문장 구분자를 실행해서 계산합니다.
    // signature algorithm
    data = base64urlEncode( header ) + "." + base64urlEncode( payload )
    signature = HMAC( data, secret_salt )
    
    서명 헤더나 서명 헤더가 다시 바뀔 때.

    긁어모으다


    따라서 JWT는 다음과 같이 보입니다.
    token = encodeBase64Url(header) + '.' + encodeBase64Url(payload) + '.' + encodeBase64Url(signature)
    
    token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL3JvaGl0am1hdGhldy5zcGFjZSIsIm5hbWUiOiJSb2hpdCBKYWNvYiBNYXRoZXciLCJhZG1pbiI6ZmFsc2V9.ZOCcJAceq0Uq3fuIfWA0FVT_BLi5o-iPvyN4rhZgBuo
    

    고정 JWT


    위 JWT를 사용하고 jwt.io에서 검사를 하면 영패의 모든 데이터를 볼 수 있을 거라고 확신합니다.이것은 어떻게 안전합니까?

    It's absolutely crucial to know that JWT's are generally encoded and not encrypted. It is a mechanism by which you can verify that the data is not tampered with and has come from a trusted source.


    JWT의 안전을 확보하는 간단한 방법은 HTTPS 포트에 요청을 보내는 것이다. 이 포트에서 요청이 전달된 모든 데이터가 암호화되어 있는지 확인하는 것이다.
    현재 JWT는 두 가지 메커니즘을 사용하여 그 중의 정보인 서명과 암호화를 보호한다.JWT의 이러한 보안 특성을 설명하는 두 가지 기준은 JSON Web Signature(JWS)와 JSON Web Encryption(JWE)이다.제가 간략하게 소개해 드릴게요.

    서명하다.


    서명의 목적은 한 측 또는 여러 방면에서 JWT의 진실성을 확정하는 것을 허용하는 것이다.만약 내가 jwt에서 위쪽 유효 하중의 값을 변경한다면.io는 제 고객에게서 사용해 보십시오.이것이 바로 우리가 JWS를 사용하여 영패에 서명할 수 있는 곳으로 JWT에 포함된 데이터가 변경되지 않았음을 검증할 수 있다.
    현재, 서명이 기본적으로 인코딩된 헤더와 유효 부하임을 기억하고, 문장을 추가한 다음 키로 해시 알고리즘을 실행합니다.
     
    마지막으로 첨부된 이 서명은 JWT가 변경되었는지 여부를 확인할 수 있습니다. 왜냐하면 데이터의 변경 사항에 대해 서명이 변경되기 때문입니다.그러나 서명은 다른 당사자가 JWT의 내용을 읽는 데 방해가 되지 않는다.이것이 바로 암호화의 목적이다.

    암호화하다


    JWT에 서명하는 것은 JWT 내용의 진실성을 확인하는 방법을 제공하지만 암호화는 제3자가 JWT 내용을 읽을 수 없게 하는 방법을 제공한다.
    암호화된 JWT는 JWE(JSON Web Encryption)라고 하는데, JWS와 달리 촘촘한 서열화 형식에는 점으로 구분된 5개의 요소가 있다.JWS와 유사하게 비밀 공유 방안과 공공 키/개인 키 방안을 두 가지 암호화 방안으로 사용할 수 있다.

    정말,😮 너무 멋있어.Turtlemint에서 JWT를 어떻게 사용하십니까?


    Google은 주로 JWT를 사용하여 여러 응용 프로그램과 더 안전한 도메인 사이에서 데이터를 전송할 수 있습니다. 
    여러 도메인에 걸쳐 여러 제품을 보유하고 있기 때문에 한 도메인에서 다른 도메인으로 데이터를 보다 안전하게 전송해야 합니다.이렇게 할 때, 흔히 볼 수 있는 문제는 CORS 문제이다.JWT 토큰은 API 호출의 일부로서 작은 용기에서 이 자원을 공유하는 것을 지원하며 데이터 (진실) 를 검증할 수 있습니다.Google은 인터넷을 통해 서로 상호작용을 하고 JWT를 사용하여 사용자와 관련된 데이터를 더욱 안전하게 전달해야 하는 서비스도 있습니다.

    기타 정보


    다음 전자책을 사용하여 JWT를 더 잘 이해하세요.인증, 보안 및 인증 솔루션의 선두 업체 중 하나Auth0가 제공합니다.

    나는 당신이 JSON 웹 영패 (JWT) 가 무엇인지, 그리고 우리가Turtlemint에서 그것들을 사용하는 실례를 이해할 수 있기를 바랍니다.그 배후의 기본 개념을 이해하기만 한다면 여러 장면에서 이를 사용하여 더욱 안전한 방식으로 데이터를 검증하거나 전송할 수 있어야 한다.당신이 사용한 재미있는 용례 아래에서 연락이나 평론을 하세요.
    읽어주셔서 감사합니다!:)
    P.S. 언제든지 저에게 연락을 주시고 당신이 생각할 수 있는 어떤 질문에도 기꺼이 대답해 주십시오.

    좋은 웹페이지 즐겨찾기