인증
Authentication
Last updated
Was this helpful?
Authentication
Last updated
Was this helpful?
인증이란?
애플리케이션이 이를 이용하려는 사람을 식별하는 프로세스를 말한다.
인증이 실패하면 메서드는 AuthenticationException을 투척해야 한다.
메서드가 현재 AuthenticationProvider 구현에서 지원되지 않는 인증 객체를 받으면 null을 반환해야 한다. 이렇게 하면 HTTP 필터 수준에서 분리된 여러 Authentication 형식을 사용할 가능성이 생긴다.
메서드는 완전히 인증된 객체를 나타내는 Authentication 인스턴스를 반환해야 한다. 이 인스턴스에 대해 isAuthenticated() 메서드는 true를 반환하며, 여기에는 인증된 엔티티의 모든 필수 세부 정보가 포함된다. 또한 일반적으로 애플리케이션은 이 인스턴스에서 암호화 같은 민감한 데이터를 제거해야 한다. 인증한 후에는 암호가 더는 필요 없으며 이러한 세부 정보를 그냥 두면 원치 않게 유출될 우려가 있다.
현재 AuthenticationProvider가 Authentication 객체로 제공된 형식을 지원하면 ture를 반환하도록 구현한다
MODE_THREDLOCAL
각 스레드가 보안 컨텍스트에 각자의 세부 정보를 저장할 수 있게 해준다. 요청당 스레드 방식의 웹 애플리케이션에서는 각 요청이 개별 스레드를 가지므로 이는 일반적인 접근법이다.
MODE_INHERITABLETHREADLOCAL
MODE_THREADLOCAL과 비슷하지만 비동기 메서드의 경우 보안 컨테스트를 다음 스레드를 복사하도록 스프링 시큐리티에 지시한다. 이 방식으로 @Async
메서드를 실행하는 새 스레드가 보안 컨텍스트를 상속하게 할 수 있다.
MODE_GLOBAL
애플리케이션의 모든 스레드가 같은 보안 컨텍스트 인스턴스를 보게 한다
특정한 SecurityContextHolder 전략으로 자체 관리 스레드를 위한 해결책을 얻을 수 없으며 개발자가 보안 컨텍스트 전파를 해결해야 한다. 한 가지 해결책은 별도의 스레드에서 실행하고 싶은 작업을 DelegatingSecurityContextRunnable로 장식하는 것이다.
DelegatingSecurityContextRunnable은 Runnable을 확장하며 반환 값이 없는 작업 실행 후 이용할 수 있다.
반환 값이 있는 작업에는 DelegatingSecurityContextCallable<T>에 해당하는 Callble<T> 대안을 이용할 수 있다.
DelegatingSecurityContextExecutorService는 보안 컨텍스트 전파도 처리한다
인증 정보는 Authorization 헤더에 Basic 접두사와 함께 Base64로 인코딩된 사용자 이름과 비밀번호를 포함합니다. 예를 들어, "username"과 "password"를 인증 정보로 사용한다면 "username:password"를 Base64로 인코딩한 값인 "dXNlcm5hbWU6cGFzc3dvcmQ="을 Authorization 헤더에 포함시킵니다.