2011-03-03 4 views
1

Spring MVC에서 웹 서비스를 통해 API를 개발 중이다. 사용자는 클라이언트 브라우저에서 인증하고 쿠키를 설정해야합니다. 이제이 API는 같은 도메인에 있지 않으므로 로그인 한 후 API 요청을 할 것이므로 클라이언트의 세션 시간이 초과 된 시점을 알 수있는 방법이 필요합니다. 가장 안전한 방법은 무엇입니까? 서버의 요청 쿠키와 비교할 세션, 캐시, 데이터베이스에 정보를 저장합니까?API User Session Spring

답변

3

필자의 경우, 성공적으로 인증 된 사용자에 대해 고유 한 인증 토큰을 생성합니다. 사용자가 웹 서비스를 호출 할 때마다 인증 토큰을 전달해야합니다.

내 인증 토큰이 생성되고,이 같은 : - 그것은 나를 활동 시간에 확인할 수 있기 때문에

Date creationDate = new Date(); 
String key = UUID.randomUUID().toString().toUpperCase() + "|" + userName + "|" + creationDate.getTime(); 
String authenticationToken = ... // encrypt key with Jasypt 

나는 작성일을 추가. 사용자가 웹 서비스를 호출 할 때마다 작성 날짜를 사용하여 유휴 기간을 확인합니다. 유휴 기간이 30 분 미만이면 유휴 기간을 다시 0으로 재설정하고 사용자가 웹 서비스를 실행할 수 있도록합니다. 그러나 사용자가 30 분 이상 유휴 상태 인 경우 인증 토큰이 유효하지 않다고 생각하고 새 토큰을 받으려면 재 인증해야합니다.

+0

아주 좋은 생각. 어떤 종류의 도용으로부터도 안전한가요? IP를 키에 저장하고 서버 측에서 확인하는 것일까 요? 데이터베이스에 어떤 것을 저장해야합니까? 수표를주기 전에 더 이상 답변을 기다릴 것입니다. –

+0

IP를 비롯한 유용한 정보를 확실히 추가하여 고유 한 키를 만들 수 있습니다. 그러면 사용자가 올바른 사용자인지 확인하기 위해보다 강력한 검사를 수행 할 수 있습니다. 필자의 경우 클러스터 환경에서 실행 중이기 때문에 유휴 기간을 데이터베이스에 저장해야하므로 '정적 맵'으로 데이터를 저장하는 것이 효과적이지 않습니다. 인증 토큰, 사용자 이름, 생성 날짜, 마지막 액세스 날짜 및 총 액세스 (감사 목적을 위해)를 포함하는 매우 단순한 데이터베이스 테이블입니다. – limc

+0

나는 전에 내가 쓴 API에 비슷한 접근법을 사용했다. 구현하기가 쉽고 원칙이 정말 마음에 듭니다. 실제로 네트워크를 통해 확실하게 전송되는 경우 취약하지만 토큰의 유효 기간에 따라 위험이 제한되며 너무 민감한 경우 클라이언트와 서버간에 HTTPS를 사용해야합니다. – dSebastien