2014-04-25 3 views
0

PHP에서 작성된 REST API의 데이터를 수신하는 AngularJS의 SPA 응용 프로그램을 개발하고 있습니다. JWT 권한을 구현해야합니다. JWT 토큰을 인코딩하고 디코딩 할 수있는 간단한 PHP JWT 라이브러리가 있지만 JWT 토큰을 확인하는 방법을 알지 못한다. 누군가 나를 PHP 측면에서 JWT 검증의 단계를 설명 할 수 있습니까?단일 페이지 응용 프로그램 인증

답변

0

은 먼저 헤더를 디코딩하기 위해 필요한이 같이 서명하는 데 사용되는 알고리즘이 포함됩니다 (당신이 마침표로 분리 한 후 JWT의 첫 부분이다 ".") :

{ 
    "alg": "HS256", 
    "cty": "JWT" 
} 

이 있음을 의미를 HMAC SHA-256을 사용하여이 토큰의 서명을 만들었습니다. HMAC는 비밀메시지에 연결하고 해시를 계산하여 생성 된 MAC입니다.이 경우 해시 함수는 SHA-256입니다. HASH가 입력을 계산하기 위해서는 하드웨어적인 측면에서 볼 때 매우 비쌉니다. 적어도 메시지가 무엇인지 알면 키를 추측 할 수 없습니다. 그러나 메시지 (JWT의 두 번째 부분)와 키가 주어지면 해시를 다시 계산하고 if가 서명 (JWT의 세 번째 파트)과 동일한 지 확인할 수 있습니다. 이 대답은 1에 HMAC에 대한 자세한 정보가 있습니다.

비록 이것은 JWT에 대한 매우 일반적인 알고리즘이지만 유일한 것은 아니므로 알고리즘을 나타내는 헤더가 아닙니다. 예를 들어 Google JWT는 비대칭 암호로 서명됩니다. 즉, 서명을 확인하는 데 사용할 수 있지만 서명하는 데 사용할 수없는 공개 키를 게시합니다. 이 알고리즘은 RS256 (a.k.a. RSA SHA-256)입니다.

이 웹 사이트는 2을 디버깅하는 데 유용합니다. 여기에 다양한 알고리즘과 여러 언어로 된 다른 구현 모음을 볼 수도 있습니다.

Firebase 사람들은 JWT에 서명하고 확인할 수있는 PHP 구현을 가지고 있습니다. 3.

관련 문제