2014-12-11 3 views
7

, 나는합니다 (Application#run IMPL에서)과 같이 기본 인증을 설정할 수 있습니다 : 나는 문자열 realm ("SECRET_REALM")의 의미가 무엇인지 궁금DropWizard 인증 렐름

BasicAuthProvider<SimplePrincipal> authProvider = new BasicAuthProvider(authenticator, "SECRET_REALM"); 
environment.jersey().register(authProvider); 

?

일반적인 보안 개념에서 나는 사용자와 역할/권한이 저장되는 장소 (데이터베이스, 디렉토리, 파일, 키 저장소 등)가되는 "영역"을 이해합니다.

영역이 DropWizard에서 무엇을 의미하며, 내부를 지정하는 의미는 무엇입니까? BasicAuthProvider? 그것은 두포의 밑에이 영역을 가진 무언가를 창조 하는가?

답변

13

영역은 특정 의미에서 서버의 일부 보호 영역/공간입니다. 영역에는 이름이 있어야합니다. this post에서 예제를 실행하고 사용자 자격 증명없이 cURL (다운로드하는 것이 좋습니다.)을 사용하면 다음과 같이 표시됩니다.

C:\>curl -i http://localhost:8080/simple 
HTTP/1.1 401 Unauthorized 
Date: Thu, 11 Dec 2014 18:55:02 GMT 
WWW-Authenticate: Basic realm="Basic Example Realm" 
Content-Type: text/plain 
Transfer-Encoding: chunked 

Credentials are required to access this resource. 

이것은 Basic Auth Protocol의 작동 방식입니다. 서버가 사용자 에이전트가 보안 리소스에 액세스하기 위해 인증 할 때,

WWW-Authenticate: Basic realm="Basic Example Realm" 

당신이 BasicAuthProvider에 제공 한 이름과 비슷한 헤더와 함께, "401 권한"다시 보내드립니다 것은 realm입니다 헤더에 제공됩니다. 에서 볼 수 있습니다 source code

if (required) { 
    final String challenge = String.format(CHALLENGE_FORMAT, realm); 
    throw new WebApplicationException(
            Response.status(Response.Status.UNAUTHORIZED) 
        .header(HttpHeaders.WWW_AUTHENTICATE, challenge) 
        .entity("Credentials are required to access this resource.") 
        .type(MediaType.TEXT_PLAIN_TYPE) 
        .build()); 

이제 브라우저에서 리소스에 액세스를 시도하십시오. 당신은

enter image description here

당신은 또한이 영역 이름을 볼 수 있습니다 볼 수 있습니다. RFC 2617는합니다 (realm에 대해) 상태 :

영역 : 그들은 사용자 이름과 암호를 사용할 알 수 있도록
문자열이 사용자에게 표시 할 수 있습니다. 이 문자열에는 적어도 호스트가 인증을 수행하는 의 이름을 포함해야하며 은 액세스 권한이있는 사용자 모음을 나타낼 수도 있습니다. 예 : 은 "[email protected]"일 수 있습니다.

+2

다시 한번 감사합니다 @peeskillet (+1)! 나는 **에 대해 많은 질문을 ** 게시 했으므로 여기까지 왔던 가장 철저하고 응답 성이 뛰어나며 도움이되는 사용자입니다. 다시 한 번 감사드립니다! – IAmYourFaja