2017-10-31 1 views
0

https를 통한 기본 인증을 구현하는 스프링 부트 백엔드 서버 애플리케이션이 있습니다. 기존의 웹 기반 프런트 엔드는 없으며 내 안드로이드 및 IOS 클라이언트는 Rest API 호출을 사용합니다.스프링 부트 기본 인증 스프링 부트 세션 가능

백엔드 응용 프로그램은 현재받은 사용자 이름과 암호 정보를 확인하고 올바른 상태 메시지 (401, 200)로 응답합니다. 스프링 부트 세션을 사용하여 세션 시작시 사용자 로그인을하고 그 세션에 대해 각각의 나머지 나머지 API 호출에 세션 값을 사용할 수 있습니까?

이 질문은 [Spring boot rest security with android and ios과 비슷하지만 세션에 대한 모든 추가 Rest API 호출에 대해받은 캐싱 및 사용 된 세션 값을 사용하지 않는 것으로 보입니다. 세션 놓기 및 게시 API 명령의 매개 변수로 세션 값을 전달합니까? 목표는 응용 프로그램에 사용자가 등록되었는지 확인하고 추가 나머지 Put 및 Post 명령을 수락하기 전에 자격 증명을 확인하는 것입니다.

나는 spring.io 문서를 읽었지만이 주제는 다루지 않았습니다. 다소 봄 부팅에 새로운.

+0

단순히 각 요청에 대한 자격 증명을 전달하지 않고 세션 ID를 사용하는 대신 [JWT] (https://jwt.io/)를 전달하십시오. 그렇게하면 상태를 유지할 수 있고 부하를 여러 서버에 분배하는 것이 간단합니다. –

+0

모바일 애플리케이션이 30 개의 레코드 x 2 개의 테이블을 더 게시 할 수 있습니다. 각 게시물에 대해 사용자를 확인하면 성능에 영향을 미칩니다. – geezer57

+0

그렇습니다. 그러나 JWT는 세션을 통해 많은 이점을 가져서는 안되며 많은 장점이 있습니다. –

답변

3

세션 기반 인증과 토큰 기반 인증을 사용할 수 있습니다. 성공적인 로그인 후에 세션 기반 인증을 사용할 때 스프링 보안 컨텍스트에서 세션이 제한된 시간에 생성되고 응답으로 JSESSIONID (기본 이름)라는 쿠키가 클라이언트에 반환됩니다. 예를 들어 :

HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
Set-Cookie: JSESSIONID=301225C7AE7C74B0892887389996785D; Path=/auth/; HttpOnly 
Content-Type: text/html;charset=ISO-8859-1 
Content-Language: en-US 
Content-Length: 90 
Date: Tue, 1 Nov 2017 01:19:38 GMT 

고객이 쿠키를 유지하기 위해 필요하고 각 요청은 로그인 한 사용자로 요청할 수하는 (세션이 만료 될 때까지) 요청이 쿠키 (JSESSIONID) 를 설정해야합니다. 클라이언트로서 당신은 테스트를 위해 우편 배달부를 사용할 수 있으며 Jersey 클라이언트 또는 HttpClient 중 하나를 사용하여 프로그래밍 방식으로 수행 할 수 있습니다. 이 link에서 우편 배달원과 보내는 쿠키를 확인할 수 있습니다.
또한 link에서 쿠키 도메인 작동 방식을 확인할 수 있습니다. 이 요청을 확인 은 인증 또는 우리가 사용할 수 있습니다뿐만 아니라 Principal 또는 아래 httpServletRequest 참조 : 당신이 /username1 엔드 포인트를 디버깅 할 경우

@RequestMapping(value = "/username", method = RequestMethod.POST) 
@ResponseBody 
public String loggedUserName(Principal principal) { 
    return principal.getName(); 
} 

@RequestMapping(value = "/username1", method = RequestMethod.POST) 
@ResponseBody 
public String loggedUserName1(HttpServletRequest request) { 
    Principal principal = request.getUserPrincipal(); 
    return principal.getName(); 
} 

는 당신이 쿠키가 제대로 여부를 요청하도록 설정되어 볼 수있을 것입니다, 올바르게 설정하지 않을 경우 아마도 당신은 익명 사용자과 관련된 문제를 겪을 것입니다.

두 번째 방법으로 JWT (Json Web Token)을 사용하는 토큰 기반 인증을 사용할 수 있습니다. 그것은 응답의 tokens.example 이상 무국적 작동합니다

{ 
"token_type": "Bearer", 
"expires_in": "3599", 
"resource": "qwd636-27bso-joiue9-ee", 
"access_token": "eyJ77hqggqDd3DctNDFjMS05MjE2LWNiYjEw" 

}

그리고 모든에 대한

당신이 액세스를 사용하여 요청의 유효성을 확인하고 토큰을 새로 고칠 수 있습니다 요청합니다.

Boolean isValidToken = jwtTokenUtil.validateToken(token, principal.getUsername()); 

희망 하시겠습니까?

관련 문제