사용자뿐만 아니라 다른 웹 서비스 및 응용 프로그램도 액세스해야하는 RESTful 웹 서비스를 설계하고 있습니다. 들어오는 모든 요청을 인증해야합니다. 모든 통신은 HTTPS를 통해 이루어집니다. 사용자 인증은 서비스에서 제공 하는 / session 리소스에 사용자 이름과 암호 (SSL 연결을 통해)를 게시하여 획득 한 인증 토큰을 기반으로 작동 합니다.
웹 서비스 클라이언트의 경우 클라이언트 서비스 뒤에 최종 사용자 가 없습니다 . 요청은 예약 된 작업, 이벤트 또는 기타 컴퓨터 작업에 의해 시작됩니다. 연결 서비스 목록은 미리 알려져 있습니다 (분명히 생각합니다). 다른 (웹) 서비스에서 오는 이러한 요청을 어떻게 인증해야합니까? 인증 프로세스가 이러한 서비스에 대해 구현하기 쉬운 것이지만 보안 비용이 들지 않기를 바랍니다. 이와 같은 시나리오의 표준 및 모범 사례는 무엇입니까?
내가 생각할 수있는 (또는 나에게 제안 된) 옵션 :
클라이언트 서비스가 "가짜"사용자 이름과 암호를 사용하도록하고 사용자와 동일한 방식으로 인증합니다. 이 옵션이 마음에 들지 않습니다.
클라이언트 서비스에 대한 영구 응용 프로그램 ID를 할당합니다. 응용 프로그램 키도 가능합니다. 내가 이해하는 한 이것은 사용자 이름 + 비밀번호를 갖는 것과 동일합니다. 이 ID와 키를 사용하여 각 요청을 인증하거나 인증 토큰을 만들어 추가 요청을 인증 할 수 있습니다. 어느 쪽이든 애플리케이션 ID와 키를 얻을 수있는 사람은 누구나 클라이언트를 가장 할 수 있기 때문에이 옵션을 좋아하지 않습니다.
이전 옵션에 IP 주소 확인을 추가 할 수 있습니다. 이것은 가짜 요청을 수행하는 것을 더 어렵게 만듭니다.
클라이언트 인증서. 내 인증 기관을 설정하고 루트 인증서를 만들고 클라이언트 서비스에 대한 클라이언트 인증서를 만듭니다. 그러나 몇 가지 문제가 떠 오릅니다. a) 사용자가 인증서없이 인증을 계속하도록 허용하는 방법 및 b) 클라이언트 서비스 관점에서이 시나리오를 구현하는 것이 얼마나 복잡합니까?
다른 것-거기에 다른 해결책이 있어야합니까?
내 서비스는 Java에서 실행되지만 기본 원칙에 더 관심이 있고 구현 세부 사항에 그다지 관심이 없기 때문에 어떤 특정 프레임 워크를 기반으로 할 것인지에 대한 정보를 의도적으로 생략했습니다. 기본 프레임 워크에 관계없이 구현이 가능합니다. 그러나 나는이 주제에 대해 약간의 경험이 없기 때문에 실제 구현에 대한 구체적인 팁과 예제 (예 : 유용한 타사 라이브러리, 기사 등)도 많은 도움이 될 것입니다.