[#48] Einführung in RESTful APIs: Authentifizierung mit JWT

안녕하세요 새로운 비디오

마지막 동영상에는 우리는 RESTful 로그인 API를 만들었습니다 언제 우리는이 API와 올바른 로그인 데이터를 입력했습니다 우리는 토큰을 되찾았다 시간은 단지 자리 표시 자일뿐입니다 이 클라이언트는 각각의 추가 토큰에서 토큰을해야합니다

서버에 질의 보내기, 예 : 사용자 데이터를 본 경우 해야한다 이 비디오에서 우리는 소위 JWT – JSON 웹 토큰 나는 이미 모든 것을 준비했다 여기에서 결과를 볼 수 있습니다 이것으로 getData 토큰의 예제가 있습니다

기능이 확보되었습니다 그녀는 나중에해야한다 중요한 데이터를 반환하십시오 내가 그녀를 가졌다면 토큰 호출없이 여기 도착하십시오 나는 응답으로 : "토큰 누락"

내가 그렇다면 하지만 Chrome 플러그인에 대해 REST 클라이언트 호출 및 여기에 적절한 토큰을 준다 나는 다음과 같은 결과를 가지고있다 이 API는 단순함을 위해서가 아니라 다음과 같이 "getData"로 계속하십시오 각 수동 사용자 ID 어쨌든, 이제 나는 나와 함께 있기 때문에 데이터에 액세스하십시오

토큰에 인증되었습니다 원칙 다음과 같습니다 : 사용자 로그 a, JSON 웹 토큰을 받고 이것은 각각의 터미널에있다 예 : 지역에 캐시 됨 메모리 또는 쿠키 앱이 그런 다음 터미널은 토큰을 보냅니다 요구하는 모든 요청

JSON 웹 토큰은 보낸 승인 헤더 에서 가장 좋은 사람은 무기명을 사용해야한다 체계를 사용하십시오 간단히 말해서, 그것은 그것에 책임이있는 각 클라이언트 JWT를 지역에 저장하는 것입니다 모든 요청과 함께 보내야한다

그는 필요합니다 베어러 스킴 외에도 다른 방법으로 예 : "Basic"및 "Digest" 이 둘 다 인증을 원한다 이름과 비밀 키 Bearer-Schema는이를위한 토큰을 기대합니다

모든 것은 항상 HTTPS를 초과해야합니다 실행합니다 여기에 내가 가진 예가있다 면제 자세한 정보 : 종종 한 사람은 JWT 용어 OAuth 또는 OAuth2

이것은 공개 된 것입니다 다른 로그 인증 및 인증에 대해 설명합니다 그렇게 정확하게 작품은 몇 가지에있다 설명 요청 (RFC) 따라서 개념은 토큰을 작성했지만 설명하지는 않습니다

구체적으로 토큰이 정확히 어떻게 보이는지 필요가있다 토큰은 하나 이상입니다 고유 한 사용자의 문자열 식별하기 좋아,있어 이 JWT를 만들었습니까? 토큰에 나는 Firebase를 사용한다

확장 나는 주로 이 웹 링크의 샘플 코드를 곱하십시오 구현 나는 비디오에 넣을거야 설명입니다

확장 프로그램은 먼저 예 : 작곡가를 통해 그래서 우리가 이미 알고있는 cd 해당 프로젝트에 명령 디렉토리를 변경 한 다음 "작곡가 firebase / php-jwt가 필요합니다 " 우리가 이미있는 곳에 우리는 할 수있다 다른 확장자를 추가하십시오 토큰을 생성하려면 목적의 알고리즘의 스펙 암호화

또한, 비밀 키 지정하기 세대를 필요로합니다 여기있다 정의에 의해 규율됩니다 나는 원한다 데이터에있는 것이 아니라 소스 텍스트를 하나에 쓴다

욥은 그런 제 3자를 넣지 마라 손이 닿기 쉬운 곳 여기에 "dotenv"확장이 도움이됩니다 Composer를 통해이 작업을 수행 할 수도 있습니다 함께 설치해야한다 " vlucas / phpdotenv "당신이 만든

env 파일의 경우 상수가 포함됩니다 사용하고 싶다 여기에 내가 가진 예가있다 가장 높은 프로젝트 수준에서 그렇게합니다 했다

정확히 어디에 의존하는지 각각의 프로젝트 그래서 나는 dotenv 사전에 dotenv를 사용해야합니다 초대 라이브러리 나는 이것을 색인에 직접 가지고있다 그것과 마찬가지로 웹 사이트가 설명됩니다 의 링크 물론, 확장 기능을 찾을 수도 있습니다

동영상 설명에 멀리까지 좋은 설치 프로그램을 실행합니다 여기 로그인 경로에는 28 ~ 47 행이 추가되었습니다 짧은 여기 그냥 배열이라고 말했다 조립 된 JWT 등록 필요 합니다 이것은 예를 들어 타임 스탬프입니다

토큰이 만들어졌습니다 어느 ID에서 그가 얼마나 오래 그가 누구에게 발급 되었는가? 이었다 jwt :: encode 함수는 그때 모든 일 여기 나는 움켜 잡는다 그때 나에게 변수에

env 파일에 정의되어 있습니다 이것은 getenv ()에 관한 것입니다 이 배열 나는 여기에 매달린다 결과 변수 그것으로 중요하다

전체 작품 : 나는 여기에 사용 명령으로 올라 가야 해 Firebase 라이브러리를 통합하십시오 내가 로그인하면 좋다 나는 뒤에 오는 것을 여기에서 얻는다 : 꽤 긴 문자열 – JWT 토큰 그건 그렇고, 여기 아름다운 것들을 볼 수 있습니다

Tripartition : 각 지점에서 분리 첫 번째 부분은 헤더입니다 예를 들어, 어떤 알고리즘 사용되었다 그런 다음 페이로드가옵니다 – 그래서 Nutzdatenteil 그것은 우리의 완전한 배열이 될 것입니다

결국 서명을 따른다 그 의지로 env 파일의 비밀 키 필요했습니다 모든 것이 그녀처럼되었다 아마 당신은 이미 base64- 인코딩

이렇게하면 파일을 쉽게 만들 수 있습니다 교환 및 저장 여기 뭔가가 아니야 암호화합니다 이 토큰이 좋다

getData에 전달됩니다 나는 그들을 여기에 정의했다 내가 getData와 각각의 사용자 ID는 여기에 있습니다 새로운 것 그러나이 철자법은 다음과 같습니다 추가 ($ 인증합니다)

나는 이것을 모든 경로에 첨부한다 당신은 자신을 인증해야합니다 할 것이다 나는 저에게서 그 추가를 가져갈 수 있었다 항상 데이터를 볼 수 있습니다 나는 그것을 다시 취소 할 것이다

좋습니다 미들웨어의 개념입니다 레이어 모델을 기반으로합니다 미들웨어는 요청에 도움이됩니다 백그라운드에서 응답 객체도 우리가 원하는대로 변경하십시오

$ authenticate 변수 뒤에 그래서 함수 이상의 아무것도 아닙니다 원칙적으로, 나는 단지 여기에서 확인한다 토큰이 권한 부여 헤더에 설정되었는지 여부 이다 나는 hasHeader () 함수를 사용하여이를 수행 할 수있다 SLIM을 만드십시오

그렇지 않은 경우에는 항상 깨끗한 상태로 회신 할 수 있습니다 401은 예 : "Unauthorized" 위키피디아에서 볼 수 있듯이 토큰이있는 경우 이번에는 jwt :: decode가 적용됩니다 토큰이 유효한지 확인하십시오 해독 된 토큰 결과 배열을 변수로 반환합니다

여기에 문자열이 있습니다 "무기명"은 아무것도 가지고 있지 않기 때문에 잘랐다 토큰과 관련이 있습니다 이것이 여기에있는이 것입니다 때문에 방금 substr () 메서드가 있습니다

PHP와 처음 7 명이 사용했습니다 서명이 끊어졌습니다 이 next () 메소드를 보았습니다 그런 다음 여기에있는 미들웨어에서 내 길 데이터 흐름 외부에서 내부로 이어집니다

그것은 먼저 인증 함수 실행 된 후 getData 만 국지 인증 제공 성공했습니다 그게 내가 할 수있는 방법이야 다시 시험하십시오 맞은 사람과 토큰이 작동합니다 그러나 단 하나 문자 변경,이 문자는 삭제하겠습니다

Q, "잘못된 토큰"이 나옵니다 그다지 멀리까지 지금은 이제 모든 API를 사용할 수 있습니다 인증 미들웨어를 통해 무단 사용을 방지하는 기능 보안 현재 아무도 없다

토큰이 있는지 검사하는 함수 어쩌면 이미 만료되었을 수도 있습니다 있다 새로운 기능도없는 기능 토큰을 발행 할 수 있습니다 너는 ~해야 해 다시 로그인하십시오 전체 주제가 매우 복잡합니다

나는 좀 더 넣었다 동영상의 추가 링크 설명입니다 다음에 봐요!