2017-12-04 14 views
0

스프링 부트 애플리케이션에서 JWT 기반 인증을 구현하고 있습니다. 사용자의 은행 계좌 정보가 포함 된 Accounts 테이블이 있습니다. 이제 사용자는 계정 번호를 사용하여 로그인하고 해당 테이블에서 핀을 지정합니다. 문제는 로그인 한 후 사용자가 JWT가 할당 한 토큰으로 무엇이든 액세스 할 수 있다는 것입니다. 그는 다른 사람의 계정 정보를 변경할 수도 있습니다. 토큰이 생성 된 사용자에게만 액세스를 제한하려면 어떻게합니까?JWT 스프링 사용자 기반 액세스

모든 사용자는 해당 사용자와 관련된 정보에만 액세스 할 수 있어야하므로 roles을 만드는 것은 옵션이 아닙니다. JWT는 이러한 기능을 제공합니까, 아니면 수동으로 토큰을 확인해야합니까? 토큰을 파싱하고 계정 번호를 검색하여 컨트롤러 메서드에 전달 된 계정 번호와 비교할 수 있지만 모든 컨트롤러 메서드를 변경해야하므로 깔끔한 솔루션처럼 보이지 않습니다.

답변

2

보안은 비즈니스 로직에 따라 다르므로 인증 공급자 측에서 그러한 확인을 수행 할 방법이 없다고 생각합니다.

당신이 할 수있는 일은 Spring의 도움으로 Spring을 Aop 방식으로 구현하는 것입니다. 당신은 심지어 보안 해결 방법에 JWT 토큰을 전달하고 사용자 정의 검사를 구현할 수있는 사용자 정의 securiry 해결

@PreAuthorize("@securityResolver.isOwner(#userId)") 
void changeAccount(UUID userId, Request body); 

@Component("securityResolver") 
public class CustomSecurityResolver { 

    public boolean isOwner(final String userId) { 
     //TODO business check here 
    } 

} 

method security을 사용할 수 있습니다. 이 경우 서비스의 비즈니스 로직을 변경하지 않고 사용자 정의 리졸버를 사용하여 몇 가지 특수 효과를 추가 할 수 있습니다.

나는 항상 맞춤법 보안을 사용하여 user could only change its own info 또는 tenant isolation 등의 검사를 구현했습니다.