>백엔드 개발 >PHP 튜토리얼 >JWT (JSON Web Tokens)와의 PHP 승인

JWT (JSON Web Tokens)와의 PHP 승인

Christopher Nolan
Christopher Nolan원래의
2025-02-08 09:57:09863검색

PHP Authorization with JWT (JSON Web Tokens) 사용자 이름/사서함 및 비밀번호와 같은 자격 증명에만 의존하는 데 사용되는 응용 프로그램 인증은 사용자가 로그 아웃 할 때까지 사용자 상태를 유지하는 데 사용되었습니다. 그 후, 우리는 인증 API를 사용하기 시작했습니다. 최근 JWT (JSON Web Tokens)는 서버 요청을 인증하는 데 점점 더 많이 사용되고 있습니다.

이 기사에서는 JWT가 무엇인지 및 JWT 기반 사용자 요청 인증에 PHP를 사용하는 방법을 소개합니다.

키 포인트

인증 방법의 진화 : 이 기사는 기존 세션에서 JWT (JSON Web Tokens) 사용에 이르기까지 사용자 인증 방법의 진화를 간략하게 설명하며, 사용자 인증 방법에서 안전하고 효율적인 웹 응용 프로그램 변환의 사용을 강조합니다. 세션 관리가 완료되었습니다.

JWT의 장점과 응용 프로그램 : 이 기사는 정보 및 메타 데이터를 저장하는 기능, OAUTH2와의 호환성 및 만료 된 제어 제공과 같은 다른 인증 방법에 대한 JWT의 장점을 설명하고 설명하며 설명합니다. JWT가 사용자 인증 프로세스의 보안 및 유연성을 향상시키는 방법. PHP의 실제 애플리케이션 : 이 기사는 JWT의 생성, 사용 및 확인을 다루는 PHP 기반 응용 프로그램에서 JWT 구현에 대한 포괄적 인 안내서를 제공합니다. 여기에는 자세한 코드 예제 및 설명이 포함되어 있으며 독자에게 자체 웹 프로젝트에서 JWT 기반 인증을 통합하기위한 명확한 로드맵을 제공합니다.

    jwt 및 세션
  1. 우선, 왜 대화가 그렇게 좋지 않습니까? 세 가지 주요 이유가 있습니다 : 데이터는 서버에 일반 텍스트로 저장됩니다. 데이터가 일반적으로 공개 폴더에 저장되지 않더라도 서버 액세스가 충분한 사람은 세션 파일의 내용을 읽을 수 있습니다.
  2. 파일 시스템 읽기/쓰기 요청이 포함됩니다. 세션이 시작되거나 데이터가 수정 될 때마다 서버는 세션 파일을 업데이트해야합니다. 앱이 세션 쿠키를 보낼 때마다 마찬가지입니다. 사용자 수가 크면 Memcached 및 Redis와 같은 대체 세션 스토리지 옵션을 사용하지 않으면 서버가 속도가 느려질 수 있습니다.
  3. 분산/클러스터 응용 프로그램. 세션 파일은 기본적으로 파일 시스템에 저장되므로 고도로 사용 가능한 애플리케이션 (로드 밸런서 및 클러스터 서버와 같은 기술이 필요함)을 위해 분산 또는 클러스터 인 인프라를 빌드하기가 어렵습니다. 다른 스토리지 미디어 및 특수 구성을 구현해야하며 그 의미를 완전히 이해해야합니다.
  4. jwt
  5. 이제 JWT 학습을 시작합시다. JSON 웹 토큰 사양 (RFC 7519)은 2010 년 12 월 28 일에 처음 출시되었으며 가장 최근 업데이트는 2015 년 5 월에있었습니다. JWT는 다음을 포함하여 API 키에 비해 많은 장점이 있습니다
      API 키는 임의의 문자열이고 JWT에는 정보와 메타 데이터가 포함되어 있습니다. 이 정보 및 메타 데이터는 사용자의 신원, 인증 데이터 및 도메인과 관련하여 토큰의 유효성과 같은 다양한 내용을 설명 할 수 있습니다.
    • JWT는 중앙 집중식 발행 또는 취소 기관이 필요하지 않습니다.
    • JWT는 OAUTH2와 호환됩니다.
    • JWT 데이터를 확인할 수 있습니다.
    • JWT는 통제가 만료되었습니다.
    • JWT는 HTTP 인증 헤더와 같은 우주 제약 환경에 적합합니다.
    • 데이터는 javaScript 객체 표기법 (JSON) 형식으로 전송됩니다.
    • JWT는 Base64Url 인코딩을 사용하여 표시됩니다.
    • JWT는 어떻게 생겼습니까?
    • 이것은 jwt 예입니다 :
    • 언뜻보기 에이 문자열은 기간이나 도트 문자와 연결된 임의의 문자 그룹 일뿐입니다. 따라서 API 키와 다르지 않은 것 같습니다. 그러나 자세히 살펴보면 세 가지 별도의 문자열이 있음을 알 수 있습니다.
    • JWT 헤더 첫 번째 문자열은 JWT 헤더입니다. Base64 URL에 인코딩 된 JSON 문자열입니다. 서명과 토큰의 유형을 생성하는 데 사용되는 암호화 알고리즘을 지정하며, 이는 항상 JWT로 설정됩니다. 알고리즘은
    • 대칭 또는
  6. 비대칭 일 수 있습니다.

    대칭 알고리즘은 단일 키를 사용하여 토큰을 생성하고 확인합니다. 이 키는 JWT의 제작자와 소비자 사이에 공유됩니다. 제작자와 소비자 만 열쇠를 알고 있는지 확인하십시오. 그렇지 않으면 누구나 유효한 토큰을 만들 수 있습니다. 비대칭 알고리즘은 개인 키를 사용하여 토큰에 서명하고 공개 키를 사용하여 토큰을 확인합니다. 이 알고리즘은 공유 키가 실용적이지 않거나 다른 당사자가 토큰의 무결성을 확인해야 할 때 사용해야합니다. JWT의 페이로드 두 번째 문자열은 JWT의 페이로드입니다. 또한 Base64 URL에 인코딩 된 JSON 문자열입니다. 여기에는 "선언"이라는 표준 필드가 포함되어 있습니다. 선언의 세 가지 유형이 있습니다.

    등록 명세서가 사전 정의되어 있습니다. JWT의 RFC에서 목록을 찾을 수 있습니다. 일반적으로 사용되는 몇 가지 진술은 다음과 같습니다.

    IAT : 토큰이 발행 한 날짜 및 타임 스탬프.
    <code>eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE0MTY5MjkxMDksImp0aSI6ImFhN2Y4ZDBhOTVjIiwic2NvcGVzIjpbInJlcG8iLCJwdWJsaWNfcmVwbyJdfQ.XCEwpBGvOLma4TCoh36FU7XhUbcskygS81HE1uHLf0E</code>
    키 : 토큰을 확인하는 데 사용할 수있는 고유 한 문자열이지만 이는 중앙 집중식이없는 발행 기관과 상반됩니다.

    iss : 발행자 이름 또는 식별자가 포함 된 문자열. 다른 응용 프로그램에서 토큰을 폐기하는 데 사용할 수있는 도메인 이름 일 수 있습니다.

    <:> NBF : 토큰은 유효한 날짜와 타임 스탬프로 간주되기 시작해야합니다. IAT와 동일해야합니다.

    exp : 토큰이 유효성을 중지 해야하는 날짜 및 타임 스탬프. IAT 및 NBF보다 커야합니다.

    필요에 따라 공개 선언을 정의 할 수 있습니다. 그러나 그들은 등록 된 진술이나 이미 존재하는 공개 진술과 동일 할 수 없습니다. 원하는대로 개인 진술을 만들 수 있습니다. 그들은 양 당사자를위한 것입니다 : 생산자와 소비자. JWT의 서명 JWT의 서명은 토큰 내용에 고유 한 디지털 서명을 사용하여 JWT의 데이터를 보호하도록 설계된 암호화 메커니즘입니다. 서명은 JWT의 무결성을 보장하여 사용자가 악의적 인 행위자가 변조하지 않았 음을 확인할 수 있도록합니다. JWT의 서명은 세 가지의 조합입니다

      JWT의 헤더 JWT의 페이로드 비밀 값
    • 이 세 가지는 JWT 헤더에 지정된 알고리즘을 사용하여 디지털로 서명합니다 (). 위의 예제를 디코딩하면 다음 JSON 문자열이 나타납니다. JWT의 헤더
    • JWT의 데이터
    • 당신은 JWT.io를 직접 시도해 볼 수 있습니다. 여기서 자신의 JWT를 인코딩하고 디코딩 할 수 있습니다.
    • PHP 기반 애플리케이션에서 jwt를 사용하십시오 이제 JWT가 무엇인지 배웠으므로 PHP 응용 프로그램에서 사용하는 방법을 배울 차례입니다. 이 기사의 코드를 복제하거나, 우리의 단계를 따르기 전에 우리의 단계를 따르십시오.
    • JWT를 통합하는 여러 가지 방법을 사용할 수 있지만 여기에 우리가 취할 것입니다.
    로그인 및 로그 아웃 페이지와는 별도로 응용 프로그램에 대한 모든 요청은 JWT를 통해 인증해야합니다. 사용자가 JWT없이 요청하는 경우 로그인 페이지로 리디렉션됩니다.

    사용자가 채우고 로그인 양식을 작성하고 제출 한 후에는 양식이 javaScript를 통해 응용 프로그램의 로그인 Endpoint Authenticate.php에 제출됩니다. 그런 다음 엔드 포인트는 요청에서 자격 증명 (사용자 이름 및 비밀번호)을 가져 와서 유효한지 확인합니다. 유효한 경우 JWT를 생성하여 클라이언트로 다시 보냅니다. 클라이언트가 JWT를 받으면 JWT를 저장하고 향후 모든 요청에 ​​응용 프로그램에 대한 요청에 사용합니다. 간단한 시나리오의 경우 사용자는 올바르게 명명 된 PHP 파일 resource.php 인 하나의 리소스 만 요청할 수 있습니다. 많이하지 않으며 요청시 현재 타임 스탬프가 포함 된 문자열 만 반환합니다.

    요청을 할 때 JWT를 사용하는 방법에는 여러 가지가 있습니다. 응용 프로그램에서 JWT는 Bearer Authorization 헤더로 전송됩니다.

    Bearer Authorization에 익숙하지 않은 경우, Token (예 : JWT)이 요청 헤더에 전송되는 HTTP 인증의 한 형태입니다. 서버는 토큰을 점검하고 토큰에 대한 "홀더"액세스 권한을 부여 해야하는지 확인할 수 있습니다.

    이것은 헤더의 예입니다 :
    <code>eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE0MTY5MjkxMDksImp0aSI6ImFhN2Y4ZDBhOTVjIiwic2NvcGVzIjpbInJlcG8iLCJwdWJsaWNfcmVwbyJdfQ.XCEwpBGvOLma4TCoh36FU7XhUbcskygS81HE1uHLf0E</code>
    응용 프로그램이받는 모든 요청에 ​​대해 PHP는 베어러 헤더에서 토큰을 추출하려고합니다. 존재하면 확인됩니다. 유효한 경우 사용자는 요청에 대한 정상적인 응답이 표시됩니다. 그러나 JWT가 유효하지 않은 경우 사용자는 리소스에 액세스 할 수 없습니다.

    jwt

    는 세션 쿠키를 대체하기위한 것이 아닙니다.
    <code>{
        "alg": "HS256",
        "typ": "JWT"
    }</code>
    전제 조건 우선, 우리는 시스템에 PHP와 작곡가를 설치해야합니다.

    프로젝트의 루트 디렉토리에서 작곡가 설치를 실행하십시오. 이로 인해 JWT 작업을 단순화하는 타사 라이브러리 인 Firebase PHP-JWT와 응용 프로그램의 구성 데이터에 대한 액세스를 단순화하기위한 Laminas-Config가 소개됩니다.

    로그인 양식

    사진 라이브러리를 설치 한 후 authenticate.php에서 로그인 코드를 점차적으로 완료하겠습니다. 먼저 작곡가가 생성 한 자동 로더를 사용할 수 있도록 일반적인 설정을합니다.

    <code>eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE0MTY5MjkxMDksImp0aSI6ImFhN2Y4ZDBhOTVjIiwic2NvcGVzIjpbInJlcG8iLCJwdWJsaWNfcmVwbyJdfQ.XCEwpBGvOLma4TCoh36FU7XhUbcskygS81HE1uHLf0E</code>
    양식 제출을받은 후 자격 증명은 데이터베이스 또는 다른 데이터 저장소에 대해 확인됩니다. 이 예의 목적 상, 우리는 그들이 유효하다고 가정하고 $ hasvalidcredentials를 true로 설정합니다.

    다음으로, 우리는 JWT를 생성하기 위해 변수 세트를 초기화합니다. JWT는 클라이언트에서 확인할 수 있으므로 민감한 정보를 포함하지 마십시오.
    <code>{
        "alg": "HS256",
        "typ": "JWT"
    }</code>
    지적할만한 또 다른 것은 $ SecretKey가 이와 같이 초기화되지 않았다는 것입니다. 환경에서 설정하고 추출하거나 phpdotenv와 같은 라이브러리를 사용하거나 구성 파일로 설정할 수 있습니다. 이 경우 JWT 코드에 집중하고 싶기 때문에이 작업을 수행하지 않습니다.

    누수를하거나 버전 제어하에 저장하지 마십시오! 페이로드 데이터를 준비한 후 다음으로 PHP-JWT의 정적 인코딩 메소드를 사용하여 JWT를 만듭니다.

    이 방법 :

    배열을 JSON 로 변환합니다 헤더를 생성 페이로드에 서명 최종 문자열 인코딩

    는 세 가지 매개 변수를 수락합니다 :

    페이로드 정보
    <code>{
        "iat": 1416929109,
        "jti": "aa7f8d0a95c",
        "scopes": [
            "repo",
            "public_repo"
        ]
    }</code>

    키 토큰에 서명하기위한 알고리즘

    기능 결과에서 Echo를 호출하여 생성 된 토큰을 반환합니다.

    JWT 사용
  7. 사진
  8. 이제 클라이언트에 토큰이 있으므로 JavaScript 또는 원하는 메커니즘을 사용하여 저장할 수 있습니다. 다음은 기본 JavaScript를 사용하여 작동하는 방법의 예입니다. index.html에서 양식이 성공적으로 제출 된 후 수신 된 JWT는 메모리에 저장되고 로그인 양식이 숨겨지고 타임 스탬프를 요청하는 버튼이 표시됩니다.
  9. JWT 사용 현재 타임 스탬프 get 버튼을 클릭하면 Resource.php에 GET 요청이 발행되며 인증 헤더에서 인증 후받은 JWT를 설정합니다.
  10. 버튼을 클릭하면 다음과 유사한 요청이 발행됩니다.
  11. JWT가 유효하다고 가정하면 리소스가 표시되며 응답은 그 후 콘솔에 기록됩니다.
  12. JWT 를 확인하십시오 마지막으로, PHP에서 토큰을 확인하는 방법을 살펴 보겠습니다. 항상 그렇듯이 작곡가의 자동 로더를 포함시킬 것입니다. 그런 다음 올바른 요청 방법이 사용되는지 확인하도록 선택할 수 있습니다. JWT 특이 적 코드에 계속 집중하기 위해 다음과 같은 코드를 건너 뛰었습니다.

    그런 다음 코드는 베어러 헤더에서 토큰을 추출하려고합니다. 나는 preg_match를 사용하여 이것을했다. 기능에 익숙하지 않으면 문자열에서 정규 표현식 일치를 수행합니다.

    여기에 사용하는 정규식은 베어러 헤더에서 토큰을 추출하고 다른 모든 것을 버릴 것입니다. 찾을 수없는 경우 HTTP 400 오류 요청이 반환됩니다.
      기본적으로 Apache는 http_authorization 헤더를 PHP로 전달하지 않습니다. 그 이유는 다음과 같습니다.
    • 기본 인증 헤더는 HTTPS를 통해 연결이 완료 될 때만 안전합니다. 그렇지 않으면 자격 증명이 인코딩 된 일반 텍스트 (암호화되지 않은)로 네트워크를 통해 전송되므로 큰 보안 문제입니다.
    • 나는이 결정의 논리를 완전히 이해합니다. 그러나 많은 혼란을 피하려면 Apache 구성에 다음을 추가하십시오. 코드는 예상대로 작동합니다. nginx를 사용하는 경우 코드는 예상대로 작동해야합니다.

      다음, 우리는 일치하는 JWT를 추출하려고합니다. 이는 $ matches 변수의 두 번째 요소에 있습니다. 사용할 수없는 경우 JWT가 추출되지 않고 HTTP 400 오류 요청이 반환됩니다.

      우리 가이 시점에 도달하면 JWT가 추출되었으므로 디코딩 및 검증 단계로갑니다. 이를 위해서는 키가 다시 필요하며,이 키는 환경 또는 응용 프로그램의 구성에서 추출됩니다. 그런 다음 PHP-JWT의 정적 디코드 메소드를 사용하여 JWT, 키 및 JWT를 해독하는 데 사용되는 알고리즘 세트로 전달합니다.
      <code>eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE0MTY5MjkxMDksImp0aSI6ImFhN2Y4ZDBhOTVjIiwic2NvcGVzIjpbInJlcG8iLCJwdWJsaWNfcmVwbyJdfQ.XCEwpBGvOLma4TCoh36FU7XhUbcskygS81HE1uHLf0E</code>
      성공적으로 디코딩 할 수 있다면 확인하려고합니다. 내 예제는 발행자 만 사용하지 않고 만료 된 타임 스탬프를 사용하기 때문에 매우 간단합니다. 실제 응용 프로그램에서는 다른 많은 진술을 사용할 수도 있습니다.

      토큰이 만료 된 것과 같이 토큰이 유효하지 않으면 사용자는 HTTP 401 무단 헤더를 받고 스크립트가 종료됩니다.
      <code>{
          "alg": "HS256",
          "typ": "JWT"
      }</code>
      디코딩 및 검증 프로세스가 실패하면 다음과 같습니다.

      제공된 세그먼트 수는 위에서 설명한 표준 3 세그먼트와 일치하지 않습니다. 헤더 또는 페이로드는 유효한 JSON 문자열이 아닙니다. 서명이 유효하지 않아 데이터가 변조되었음을 의미합니다!

      NBF 선언은 JWT로 설정되어 있으며 타임 스탬프는 현재 타임 스탬프보다 작습니다.

      IAT 선언은 JWT로 설정되어 있으며 타임 스탬프는 현재 타임 스탬프보다 작습니다.

      exp 선언은 JWT에서 설정되며, 타임 스탬프는 현재 타임 스탬프보다 큽니다.
      <code>{
          "iat": 1416929109,
          "jti": "aa7f8d0a95c",
          "scopes": [
              "repo",
              "public_repo"
          ]
      }</code>

      보시다시피, JWT는 유효한 토큰 목록을 수동으로 취소하거나 확인하지 않고도 유효하지 않은 것으로 표시 할 수있는 멋진 컨트롤 세트를 가지고 있습니다.

      디코딩 및 검증 프로세스가 성공하면 사용자는 요청을 발행하고 해당 응답을 받게됩니다.

      요약

        이것은 JSON 웹 토큰 (또는 JWT)에 대한 빠른 소개와 PHP 기반 애플리케이션에서 사용하는 방법입니다. 여기에서 다음 API에서 JWT를 구현하거나 RS256과 같은 비대칭 키를 사용하는 다른 서명 알고리즘을 시도하거나 기존 OAUTH2 인증 서버에 통합하여 API 키로 사용하는 다른 서명 알고리즘을 시도해 볼 수 있습니다.
      • 의견이나 질문이 있으시면 트위터를 통해 저희에게 연락하십시오.
      • PHP 인증에 JWT를 사용하는 FAQ PHP에서 JWT를 사용할 수 있습니까?

        실제로 PHP에서 JWT를 사용하여 웹 응용 프로그램에서 인증 및 권한 부여 메커니즘을 설정할 수 있습니다. 시작하려면 작곡가를 사용하여 "FireBase/PHP-JWT"또는 "LCobucci/JWT"와 같은 PHP JWT 라이브러리를 설치해야합니다. 이 라이브러리는 JWT를 생성, 인코딩, 디코딩 및 검증하는 데 필요한 도구를 제공합니다. JWT를 만들려면 라이브러리를 사용하여 발행자, 청중, 만료 시간 등과 같은 진술이 포함 된 토큰을 구축 할 수 있습니다. 일단 만들어지면 키로 토큰에 서명 할 수 있습니다. JWT를 수신 할 때 라이브러리를 사용하여 해독하고 확인하여 진위를 확인할 수 있습니다. 토큰이 유효하고 확인되면 선언에 액세스하여 사용자 신원 및 권한을 결정하여 PHP 응용 프로그램에서 안전한 인증 및 승인을 구현할 수 있습니다. JWT를 사용할 때 키를 보호하고 보안 모범 사례를 따르는 것은 응용 프로그램 리소스에 대한 무단 액세스를 방지하기 위해 중요합니다.

        PHP의 JWT 인증이란 무엇입니까?

        PHP의 JWT (JSON Web Token) 인증은 웹 응용 프로그램에서 사용자 인증 및 인증을 구현하는 데 널리 사용되는 방법입니다. 토큰 인증을 기반으로하며 보안 및 무국적 사용자 인증을 가능하게합니다. JWT 인증이 PHP에서 작동하는 방법은 다음과 같습니다. 먼저, 사용자 인증 또는 로그인 중에 서버는 사용자 ID, 사용자 이름 및 역할과 같은 사용자와 관련된 정보 (클레임)가 포함 된 소형의 자체 포함 된 토큰 인 JWT를 생성합니다. 이 선언은 일반적으로 JSON 데이터입니다. 그런 다음 서버는 무결성과 진정성을 보장하기 위해이 토큰에 열쇠로 서명합니다. 둘째, 성공적인 인증 후 서버는 JWT를 클라이언트로 다시 보냅니다. 이는 일반적으로 HTTP 쿠키 또는 로컬 스토리지와 같은 안전한 위치에 저장됩니다. 이 토큰은 인증의 증거 역할을합니다. 마지막으로, 서버에서 보호 된 리소스에 대한 후속 요청의 경우 클라이언트는 일반적으로 "Bearer"구성표가있는 "권한 부여"헤더를 사용하여 JWT를 요청 헤더에 추가합니다. JWT를 수신 한 후 서버는 토큰 생성 중에 사용 된 것과 동일한 키를 사용하여 서명을 확인합니다. 또한 토큰이 만료되지 않았고 유효한 선언이 포함되어 있는지 확인합니다. 성공적인 검증 후, Token 선언에서 사용자 정보를 추출하고 권한 부가 로직을 구현하여 사용자가 요청 된 리소스에 액세스하는 데 필요한 권한이 있는지 확인합니다. 이 접근법을 사용하면 서버 측 세션 스토리지가없는 PHP 응용 프로그램에서 안전한 상태의 인증이 가능합니다. PHP의 JWT 인증은 확장 성 및 무국적 부족과 같은 많은 이점을 제공하지만, 키를 보호하고 토큰 관리를 채택하는 모범 사례는 애플리케이션의 보안을 유지하는 데 필수적입니다. 기존 PHP JWT 라이브러리를 사용하면 토큰 처리를 단순화하고 보안을 향상시킬 수 있습니다.

        PHP에서 JWT의 대안은 무엇입니까?

        PHP의 인증 및 승인을위한 JWT (JSON Web Tokens)의 대안은 세션 기반 인증입니다. 세션 기반 인증에서 서버는 각 인증 된 사용자에 대해 하나의 세션을 유지합니다. 사용자가 로그인하면 고유 한 세션 식별자가 생성됩니다 (일반적으로 클라이언트 브라우저의 세션 쿠키로 저장). 이 식별자는 사용자를 사용자 ID, 사용자 이름 및 권한과 같은 사용자와 관련된 정보를 포함하여 사용자를 서버 측 세션 데이터와 연결하는 데 사용됩니다. 세션 기반 인증은 단순성과 구현의 용이성을 제공하므로 다양한 웹 애플리케이션에 적합합니다. 특히 JWT의 무국적 및 확장 가능한 기능이 필요하지 않은 경우. 본질적으로 상태가 적용되며 사용자 세션 중에 쇼핑 카트 컨텐츠 또는 사용자 기본 설정과 같은 사용자 별 데이터를 관리해야 할 때 유리할 수 있습니다. 그러나 세션 기반 인증을 사용할 때 고려해야 할 몇 가지 사항이 있습니다. 상태가없는 인증이 필요한 분산 또는 마이크로 서비스 기반 아키텍처에는 적용 할 수 없습니다. 또한 사용자 세션을 관리하면 특히 사용자 기반이 더 큰 응용 프로그램에서 서버로드가 증가 할 수 있습니다. 궁극적으로 PHP에서 JWT 및 세션 기반 인증을 선택하는 것은 애플리케이션의 특정 요구 사항 및 설계 고려 사항과 일치하여 안전하고 효과적인 인증 메커니즘이 귀하의 요구에 가장 잘 충족해야합니다.

        JWT를 사용하여 PHP API를 보호하는 방법은 무엇입니까?

        JWT (JSON Web Tokens)로 PHP API를 보호하려면 인증과 인증을 결합한 다단계 프로세스가 필요합니다. 먼저, 적절한 PHP JWT 라이브러리 (예 : "Firebase/PHP-JWT"또는 "LCOBUCCI/JWT")를 선택하여 토큰 관련 작업을 처리하고 작곡가를 사용하여 종속성을 관리하십시오. 인증을 위해서는 PHP 응용 프로그램에서 사용자 인증 시스템을 구현해야합니다. 이 시스템은 데이터베이스 또는 인증 제공 업체에 대한 사용자 자격 증명을 확인합니다. 성공적인 인증 후에는 사용자의 ID, 사용자 이름 및 역할과 같은 사용자 관련 클레임이 포함 된 JWT 토큰을 생성합니다. 만료 시간을 설정하여 토큰의 유효성을 제어 한 다음 키로 토큰에 서명하십시오. 이 서명 된 토큰은 인증 응답의 일부로 클라이언트에게 다시 전송됩니다. 클라이언트는 수신 된 JWT, 일반적으로 HTTP 쿠키 또는 로컬 스토리지에 안전하게 저장합니다. 후속 API 요청의 경우 클라이언트는 요청 헤더에 "Bearer"체계가있는 "인증"헤더로 JWT를 포함시킵니다. PHP API에서 토큰을 만들 때 사용 된 것과 동일한 키를 사용하여 서명을 확인하여 들어오는 JWT를 확인할 수 있습니다. 또한 토큰이 만료되지 않았으며 유효한 선언이 포함되어 있는지 확인합니다. 성공적인 검증 후, 토큰 선언에서 사용자 정보를 추출하고 권한 부가 로직을 구현하여 사용자가 요청 된 리소스에 액세스하는 데 필요한 권한이 있는지 확인합니다. 키 보안을 유지하는 것이 토큰에 서명하고 확인하는 것이 중요하기 때문에 중요합니다. 이 키의 유출은 심각한 보안 취약성으로 이어질 수 있습니다.

위 내용은 JWT (JSON Web Tokens)와의 PHP 승인의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.