jwt 로그인 예제

Posted by on kol. 2, 2019 in Nekategorizirano | 0 comments

사용자가 로그인하여 보호된 리소스에 액세스할 수 있도록 REST API 끝점을 만듭니다. 그러나 여전히 응용 프로그램 내부의 로그인 화면을 통해 사용자를 로그인하는 것도 실행 가능하고 일반적으로 사용되는 솔루션이므로 이를 다루겠습니다. 클라이언트에서 fetch()를 사용하여 보호된 경로에 대한 액세스를 요청하는 간단한 예: 헤더 이름()의 경우 X-Authorization를 사용하고 있습니다. 우리가 볼 수 있듯이,이 페이지는 두 개의 필드와 간단한 양식 될 것 이다: 전자 메일 및 암호. 사용자가 로그인 단추를 클릭하면 사용자와 암호가 로그인() 호출을 통해 클라이언트 측 인증 서비스로 전송됩니다. 인증은 로그인 페이지에서 시작되며, 이 페이지는 도메인 또는 타사 도메인에서 호스팅할 수 있습니다. 엔터프라이즈 시나리오에서 로그인 페이지는 회사 전체의 Single Sign-On 솔루션의 일부인 별도의 서버에서 호스팅되는 경우가 많습니다. 유랑위드 업 명령으로 유랑 상자를 부팅하고 유랑 ssh를 사용하여 로그온한 후 이전에 정의된 프로젝트 디렉토리로 이동합니다. 위의 예에서 /home/vagrant/코딩/jwt가 됩니다. 이제 데이터베이스에서 필요한 사용자 테이블을 만들기 위해 php 장인 마이그레이션 명령을 실행할 수 있습니다. 브라우저 또는 모바일 클라이언트는 사용자 로그인 정보가 포함된 인증 서버에 요청을 합니다. 인증 서버는 새 JWT 액세스 토큰을 생성하여 클라이언트에 반환합니다. 제한된 리소스에 대한 모든 요청에서 클라이언트는 쿼리 문자열 또는 권한 부여 헤더로 액세스 토큰을 보냅니다.

그런 다음 서버는 토큰의 유효성을 검사하고 유효한 경우 보안 리소스를 클라이언트에 반환합니다. 고유한 HTTP 전용 속성이 있는 쿠키는 JWT를 저장하기 위한 확실한 선택이지만 다른 좋은 선택사항이 있습니다. 예를 들어 쿠키 대신 HTTP 응답 본문의 클라이언트로 JWT를 다시 보내려고 합니다. 즉, JWT를 쿠키에 저장하는 경우 로그인 페이지와 응용 프로그램이 동일한 루트 도메인을 공유한다고 가정할 때마다 쿠키를 응용 프로그램 서버로 다시 보내기 위한 클라이언트 논리가 필요하지 않습니다. 참고: 위의 예에서는 사용자 이름과 암호를 조롱하고 있지만 실제로는 데이터베이스 서버에서 이러한 세부 정보를 가져와야 합니다. 요점을 설명하기 위해, 나는이 문서에 더 많은 세부 사항을 추가 하지 자제. SPA에서 직접 로그인 페이지를 만들면 이 예제 페이로드에는 등록된 클레임 두 개, 공개 클레임 1개 및 개인 클레임 2개가 있습니다. base64 인코딩되면 JWT의 두 번째 부분이 있습니다. 우리는 사용자 인증 및 샘플 데이터에 대한 Laravel 백 엔드 인증 서버에 대한 API 호출과 교차 원본 예제 데이터에 대한 API 서버에 의존하여 AngularJS를 프런트 엔드로 사용하고 있습니다. 프로젝트의 홈페이지로 이동하면 백 엔드는 Angular 응용 프로그램을 부트스트랩하는 리소스/뷰/spa.blade.php 보기를 제공합니다. server.js에서 먼저 토큰을 만드는 로그인 경로가 있습니다. 그 후 우리는 우리가 토큰을 확인하는 데 사용할 미들웨어가 있습니다.

인증이 필요한 모든 경로는 미들웨어 이후입니다. 순서는 매우 중요합니다. 예를 들어 나중에 보안 공급자를 변경하거나 보안 논리를 리팩터링해야 하는 경우 이 클래스만 변경하면 됩니다. Laravel을 사용하여 사용자 등록을 처리하고, 사용자 데이터를 데이터베이스에 유지하며, Angular 앱이 사용할 수 있도록 인증이 필요한 제한된 데이터를 제공합니다. 예제 API 하위 도메인을 만들어 CORS(원본 간 리소스 공유)도 시뮬레이션합니다. 모의 사용자에 액세스할 수 있도록 이 모듈을 경로/api/userRoute.js 파일로 가져옵니다. 일반적으로 사용자는 데이터베이스에서 가져옵니다. JSON 웹 토큰은 비밀 키를 사용하여 암호화됩니다. 우리는 php 장인 jwt:생성 명령을 사용하여 해당 키를 생성 할 수 있습니다. 그것은 우리의 config / jwt.php 파일 안에 배치됩니다. 그러나 프로덕션 환경에서는 구성 파일 내에 암호 나 API 키를 갖고 싶지 않습니다.