2017-03-20 2 views
0

비즈니스 로직 및 데이터 트랜잭션을 위해 서버 측 프로세스에 연결해야하는 모바일 애플리케이션을 설계하는 중입니다. Spring Boot를 사용하여 Java에서 서버 측 코드를 작성 중이며 모바일 앱이 서버에 연결하기 위해 Rest API를 작성하려고합니다.모바일 앱용 API 보안

모바일 앱과 서버 간의 연결을 안전하게 유지하는 최선의 방법에 대해 지금 막 연구 중입니다. 내가하고 싶은 것은 모바일 앱 사용자가 일단 앱을 열어 로그인 한 다음 앱을 사용하고 싶을 때 한동안 앱을 사용하고 일정 기간 동안 사용하지 않으면 시간이 초과 될 수 있도록 허용하는 것입니다.

누구나 매우 간단하게이 책을 추천 할 수 있습니까? OAuth2를 살펴 봤지만 다른 계정 (예 : Google, GitHub 등)을 사용하여 웹 서비스에 로그인 한 것으로 보입니다.

사용자 이름과 암호를 나머지 끝점에 전달하고 일종의 토큰 (GUID?)을 반환하여 https (SSL)를 통해 로그인 할 수 있습니까? 그런 다음 서버가 호출을 확인할 수 있도록 클라이언트 (모바일 앱)가 각 후속 호출에서 해당 GUID를 전달하게 하시겠습니까? 이 시나리오에서 SSL을 통해 모든 것을 수행하는 것이 더 나은가?

나는 꽤 많은 연구를 해왔지만, 나는 내가하려고하는 것과 완전히 일치하는 것을 찾을 수 없을 것 같다.

희망 누군가가

감사

나는 보통 JSON 웹 토큰 ( https://jwt.io/를) 공예되는 일을

답변

1

을 돕고, 내 자신의 세션을 처리 할 수 ​​있습니다.

JWT는 서버 측에서 비밀 키를 정의하기 만하면되기 때문에 정말 좋습니다. 고객이 작성한 문자열 (예 : 헤더 내부)을 전달할 수 있고 아무도 자신의 비밀 키를 검색하지 않는 한 토큰을 만들 때 푸시 한 모든 데이터가 생성 된 것입니다. (가장 강력한 암호화 알고리즘을 사용하는 것을 주저하지 마십시오.)

+0

게시물 주셔서 감사합니다. 정확히 내가 찾고있는 것 같습니다. – user1387735

1

안전한 연결을 위해서는 레벨 TLS 1.2 레벨에서 HTTPS를 사용하십시오. 그런 다음 MITM 공격을 막을 수있는 서버 인증서를 응용 프로그램에 고정하십시오.

사용자 이름과 암호를 전달하는 것이 안전합니다. 추가 인증이 필요/필요하면 시간 제한 토큰을 반환 할 수 있습니다.

HTTPS를 사용하는 경우 URL의 주소 부분 만 암호화됩니다. 그러나 쿼리 문자열에주의하십시오. 서버 로그에 끝날 수 있습니다.

0

답장을 보내 주셔서 다시 한 번 감사드립니다. server.ssl.key-store 매개 변수를 사용하여 https에서 실행되도록 내 서비스를 구현했는데 제대로 작동하는 것처럼 보입니다. keytool.exe를 사용하여 트러스트 스토어를 만들고 Trustshop을 사용하여 내 SpringBoot 앱 (Tomcat이 임베드 된 상태로)을 실행합니다. 이번에는 HTTP가 아닌 https를 사용하여 브라우저를 열 수 있으며 브라우저에서 인증을 요청하고 사용자 세부 정보를 입력하면 db 사용자와 일치시켜 서버의 응답을 볼 수 있습니다.

이전 브라우저를 사용하여 REST 엔드 포인트에 액세스 할 수 있고 사용자 이름과 비밀번호를 입력하면 서버 측 (Java)에 트러스트 스토어가 있어야한다는 점이 한 가지 질문입니까? 결국이 REST 엔드 포인트는 브라우저를 통해 액세스 할 수 없으며 프로그래밍 방식으로 모바일 앱을 사용하여 액세스 할 수 있으므로 https를 통한 사용자 이름 및 비밀번호를 사용하여 로그온 할 것이라고 가정합니다. 나는 의사 소통을 위해 클라이언트 측에서 일종의 인증서를 가져야한다고 생각했거나 이런 식으로 작동하지 않습니까?

다시 한 번 감사합니다.