서버에서 호스팅 될 응용 프로그램을 작성 중입니다. 모든 플랫폼 (Web App, Mobile App)과의 상호 작용을 촉진하기 위해 응용 프로그램 용 API를 만들고 싶습니다. 내가 이해하지 못하는 것은 REST API를 사용할 때 사용자를 어떻게 인증한다는 것입니다.
예를 들어, 사용자가 로그인 한 후 포럼 주제를 작성하려고 할 때. 사용자가 이미 로그인했는지 어떻게 알 수 있습니까?
답변
HTTP 기본 또는 다이제스트 인증을 사용할 수 있습니다. SSL을 사용하여 사용자를 안전하게 인증 할 수는 있지만 API 속도가 약간 느려집니다.
- 기본 인증-사용자 이름 및 비밀번호에 Base64 인코딩 사용
- 다이제스트 인증-사용자 이름과 비밀번호를 해시하여 네트워크를 통해 보냅니다.
OAuth 가 최고입니다. oAuth가 제공하는 장점은 변경 가능하거나 만료 가능한 토큰입니다. 구현 방법에 대해서는 다음을 참조하십시오. 의견의 Working Link : https://www.ida.liu.se/~TDP024/labs/hmacarticle.pdf
답변
예를 들어, 사용자가 로그인 한 경우 이제 사용자가 포럼 주제를 작성한다고 말할 수 있습니다. 사용자가 이미 로그인했는지 어떻게 알 수 있습니까?
“포럼 만들기”API에 현재 요청이 인증 된 사용자의 요청임을 알리는 핸드 셰이크가 있어야합니다. REST API는 일반적으로 상태 비 저장이므로 상태는 어딘가에 유지되어야합니다 . REST API를 사용하는 클라이언트는 해당 상태를 유지해야합니다. 일반적으로 이는 사용자가 로그인 한 이후에 전달되는 일부 토큰 형태입니다. 토큰이 양호하면 요청이 양호합니다.
Amazon AWS의 인증 방법을 확인하십시오. 한 API에서 다른 API로 “벅을 전달”하는 완벽한 예입니다.
* 이전 답변에 실질적인 응답을 추가 할 생각이었습니다. Apache Shiro (또는 인증 / 인증 라이브러리)를 사용해보십시오. 결론은 사용자 정의 코딩을 시도하고 피하십시오. 좋아하는 라이브러리를 통합하면 (Apache Shiro, btw 사용) 다음을 수행 할 수 있습니다.
- 로그인 / 로그 아웃 API를 같이 만들기 :
/api/v1/login
및api/v1/logout
- 이 로그인 및 로그 아웃 API에서 사용자 저장소로 인증을 수행하십시오.
- 결과는
JSESSIONID
클라이언트 (웹, 모바일 등)로 다시 전송 되는 토큰 (일반적으로 )입니다. - 이 시점부터 고객이 수행 한 모든 후속 통화에는이 토큰이 포함됩니다
- 다음에 호출되는 API를 호출한다고 가정 해 보겠습니다.
/api/v1/findUser
- 이 API 코드가 수행 할 첫 번째 일은 토큰을 확인하는 것입니다 ( “이 사용자는 인증 되었습니까?”).
- 응답이 NO로 돌아 오면 클라이언트에서 HTTP 401 상태를 다시 발생시킵니다. 그들이 처리하게하십시오.
- 답변이 예이면 요청 된 사용자를 반환하십시오.
그게 다야. 도움이 되었기를 바랍니다.
답변
-
HTTP 기본 인증 을 사용 하여 클라이언트를 인증하지만 사용자 이름 / 암호 만 임시 세션 토큰으로 취급하십시오 .
세션 토큰은 모든 HTTP 요청에 첨부 된 헤더
Authorization: Basic Ym9ic2Vzc2lvbjE6czNjcmV0
일뿐입니다. 위의 문자열 Ym9ic2Vzc2lvbjE6czNjcmV0은 Base64로 인코딩 된 문자열 “bobsession1 : s3cret”(사용자 이름 / 암호)입니다.
-
위의 임시 세션 토큰을 얻으려면
http://mycompany.com/apiv1/login
master-username 및 master-password를 입력으로 사용하고 서버 측에서 임시 HTTP 기본 인증 사용자 이름 / 비밀번호를 생성하고 토큰을 반환 하는 API 함수 (예 :)를 제공하십시오 (예 : Ym9ic2Vzc2lvbjE6czNjcmV0). 이 사용자 이름 / 비밀번호는 일시적이어야하며 20 분 정도 지나면 만료됩니다. -
보안 강화를 위해 REST 서비스가 HTTPS를 통해 제공되므로 정보가 일반 텍스트로 전송되지 않습니다
Java를 사용하는 경우 Spring Security 라이브러리는 위의 방법을 구현하기 위해 훌륭한 지원을 제공합니다
답변
가장 좋은 방법은 OAuth2를 사용하는 것입니다. 구글 그것과 당신이 그것을 설정하는 데 도움이되는 유용한 게시물이 많이 있습니다.
웹 앱 또는 모바일에서 API 용 클라이언트 애플리케이션을보다 쉽게 개발할 수 있습니다.
그것이 당신을 돕기를 바랍니다.
답변
JWT 인증을 사용하고 있습니다. 내 응용 프로그램에서 잘 작동합니다.
사용자 자격 증명이 필요한 인증 방법이 있습니다. 이 방법은 자격 증명의 유효성을 검사하고 성공할 경우 액세스 토큰을 반환합니다.
이 토큰은 요청 헤더에서 내 웹 API의 다른 모든 메소드로 전송되어야합니다.
구현하기 쉽고 테스트하기가 쉽습니다.