2017-12-21 16 views
0

REST를 통해 원격 Java 서비스와 통신하는 모바일 앱을 작성 중입니다. https 보호 (데이터의 특성으로 인해 보안이 필요함)로 내 (SpringBoot) 웹 서비스를 보호했지만 내 질문은 https 호출을 보호하기 위해 사용하는 사용자/암호에 대한 것입니다.서비스 사용자 또는 공용 사용자가있는 안전한 REST 끝점

https 헤더에서 사용하는 사용자 이름과 비밀번호는 클라이언트 (모바일 앱) 및 Java 서비스가 알고있는 서비스 계정이어야합니까, 아니면 공용 사용자의 사용자 이름과 비밀번호 여야합니까? 가장 쉬운 옵션은 서비스 계정을 사용하는 것뿐입니다.하지만 모바일 앱에는 이러한 세부 정보가 내장되어 공개적으로 배포됩니다 (컴파일 된 형태 임에도 불구하고).

다른 방법으로 사용자의 사용자 이름과 암호를 사용한다는 것은 로그온 REST 끝점을 열어 놓아야한다는 것을 의미합니다 (이는 괜찮을 것 같습니다).하지만 약간 더 까다롭게 보입니다.

답변

0

좋은 질문입니다. 토큰 기반 인증 및 권한 부여 체계를 사용하겠습니다. 먼저 사용자가 자신의 사용자 저장소를 유지 관리하는 원격 로그인 서비스를 호출하여 인증 된 사용자 이름과 암호를 제공하여 클라이언트가 로그인하는 로그인 페이지가 있거나 조직에 기존 로그인을 사용하는 로그인 페이지가 있어야합니다. 인증이 성공하면 인증 서비스는 클라이언트에게 유효한 토큰을 제공해야하며,이 토큰은 때때로 새로 고쳐집니다. 모바일 또는 웹 클라이언트는 요청이 전송 될 때 토큰을 다운 스트림 마이크로 서비스로 전달해야하며이 토큰은 Authorization HTTP 헤더 안에 보내야합니다.

일반적으로 좋은 솔루션으로 간주되지 않는 네트워크를 지나가는 동안 사용자 이름과 암호를 노출하므로 토큰이 편리해집니다. 토큰은 사람들이 나머지 끝점을 보호하는 데 사용하는 일반적인 절차입니다. Yous rest endpoint는 각각의 모든 요청을 가로 챌 것이고 토큰을 auth 공급자에게 전달하고이를 확인합니다. 토큰이 유효하면 요청을 허용하고 그렇지 않으면 거부해야합니다.

보안은 꽤 큰 주제이며, https 등의 전선을 통해 전송 된 데이터를 암호화하는 토큰 이외의 X.509 인증서가 있습니다. 스프링 시큐리티 documentation을 살펴 보는 것이 좋은 출발점이 될 것이므로 제안하십시오. 스프링 시큐리티 (Spring Security)는 개발자들에게 많은 유익한 정보를 제공한다. JWT 스타일 토큰을 사용할 수 있으며, Oauth 토큰 및 스프링 보안은 이러한 다양한 형태를 모두 지원합니다.

+0

응답 해 주셔서 감사합니다. 내가 정말로 이해하려고하는 것은 대화에서 서비스가 완전히 암호화 될 때입니다. – user1387735