2014-12-11 9 views
7

In DropWizard, posso impostare autenticazione di base in questo modo (nel Application#run impl):DropWizard Auth Realms

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

Mi chiedo che cosa il significato della stringa realm ("SECRET_REALM") è?

Dai concetti di sicurezza generale, comprendo un "regno" come luogo (database, directory, file, archivio chiavi, ecc.) In cui sono memorizzati utenti e ruoli/autorizzazioni.

Che cosa significa un dominio in DropWizard e qual è il significato di specificarlo all'interno di BasicAuthProvider? Crea qualcosa con questo regno sotto il cofano?

risposta

13

Un reame è, in un certo senso, un'area protetta/spazio nel server. Il regno dovrebbe avere un nome. Se eseguiamo l'esempio da this post, utilizzando cURL (che consiglio di scaricare, poiché è utile per lo sviluppo), senza le credenziali dell'utente, vedremo quanto segue.

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. 

Questo è come funziona il Basic Auth Protocol. Quando il server vuole l'agente utente per l'autenticazione, di accedere a una risorsa protetta, invierà indietro un "401 Unauthorized", insieme con l'intestazione simile a

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

Il nome che fornirai al BasicAuthProvider è la realm che sarà fornito nell'intestazione. Si può vedere nella 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()); 

Ora provate ad accedere alla risorsa dal browser. Vedrete

enter image description here

si può anche vedere il nome di dominio lì. Il RFC 2617 Uniti solo (circa il realm):

regno:
Una stringa da visualizzare per gli utenti in modo che sappiano che il nome utente e la password da utilizzare . Questa stringa deve contenere almeno il nome di l'host che esegue l'autenticazione e potrebbe inoltre indicare la raccolta di utenti che potrebbero avere accesso. Un esempio potrebbe essere "[email protected]".

+2

Ancora una volta, grazie @peeskillet (+1)! Ho pubblicato ** un sacco ** di domande su SO, e tu sei di gran lunga l'utente più completo, reattivo e utile che ho incontrato qui. Grazie ancora! – IAmYourFaja