모바일 응용 프로그램과 API의 양이 매일 증가하고 있기 때문에 여전히 REST API를 보호하기위한 최상의 보안 솔루션을 찾고 있습니다.
다른 인증 방법을 시도했지만 여전히 약간의 오해가 있으므로 더 경험이 많은 사람의 조언이 필요합니다.
내가이 모든 것을 이해하는 방법을 알려 드리겠습니다. 무언가를 잘못 이해하면 알려주십시오.
일반적으로 WEB뿐만 아니라 REST API가 상태 비 저장 상태 인 한, 각 요청 (쿠키, 토큰 등)마다 인증 데이터를 보내야합니다. 사용자를 인증하기 위해 널리 사용되는 세 가지 메커니즘을 알고 있습니다.
HTTPS를 사용한 토큰. 나는이 접근법을 여러 번 사용하여 HTTPS로 충분합니다. 사용자가 올바른 비밀번호와 로그인을 제공하면 토큰이 응답하여 추가 요청에 사용됩니다. 토큰은 서버에 의해 생성되고 예를 들어 별도의 테이블 또는 사용자 정보가 저장된 것과 같은 테이블에 저장됩니다. 따라서 각 요청 서버에 대해 사용자에게 토큰이 있고 데이터베이스와 동일한 지 확인합니다. 모든 것이 매우 간단합니다.
JWT 토큰. 이 토큰은 자체 설명이 가능하며 토큰 자체에 대한 모든 필요한 정보가 포함되어 있습니다.이 토큰은 비밀 키워드로 서버에서 생성 (서명)되기 때문에 만료 날짜 또는 기타 클레임 등을 변경할 수 없습니다. 이것도 분명합니다. 그러나 개인적으로 하나의 큰 문제는 토큰을 무효화하는 방법입니다.
OAuth 2. 서버와 클라이언트간에 직접 통신이 설정 될 때이 방법을 사용해야하는 이유를 모르겠습니다. 내가 이해하는 한 OAuth 서버는 제한된 범위의 토큰을 발행하여 다른 응용 프로그램이 암호 및 로그인을 저장하지 않고 사용자 정보에 액세스 할 수 있도록하는 데 사용됩니다. 이것은 사용자가 일부 페이지에 가입하기를 원할 때 소셜 네트워크에 대한 훌륭한 솔루션입니다. 예를 들어 서버는 트위터 나 페이스 북에서 사용자 정보를 가져오고 사용자 데이터 등으로 등록 필드를 채울 수있는 권한을 요청할 수 있습니다.
온라인 상점을위한 모바일 클라이언트를 고려하십시오.
첫 번째 질문 첫 번째 유형 토큰보다 JWT를 선호해야합니까? 모바일 클라이언트에서 로그인 / 로그 아웃 사용자가 필요한 한 토큰을 저장하거나 JWT의 경우 로그 아웃시 토큰이 무효화되어야합니다. 토큰 중 하나를 무효화하는 데 다른 접근 방식이 사용됩니다. 유효하지 않은 토큰 목록 (블랙리스트)을 작성하는 것입니다. 흠. 테이블 / 파일은 토큰이 테이블에 저장되고 사용자와 연관되고 로그 아웃시 제거 된 경우보다 훨씬 더 큽니다.
JWT 토큰의 장점은 무엇입니까?
OAuth에 대한 두 번째 질문은 서버와 직접 통신하는 경우 사용해야합니까? 클라이언트와 서버 사이에 토큰을 발행하기위한 하나 이상의 계층의 목적은 있지만 oauth 서버가 아니라 기본 서버와 통신합니다. 알다시피 OAuth 서버는 타사 앱에 사용자 개인 정보에 액세스 할 수있는 권한 (토큰)을 부여 할 책임이 있습니다. 그러나 내 모바일 클라이언트 응용 프로그램은 타사가 아닙니다.