Hello Randy. Even with HTTP Basic auth the provided credentials
(user+pass) are encoded. They are not transmitted like this on the
wire:

user=the_user
password=the_password

but, rather, like this, in a standard HTTP header:

Authorization   Basic YWRtaW5AY2FsZW5jby5jb206MTExMTEx

That YW...MTEx 'thing' is not encrypted, but encoded. However, you
don't have to even care about this, because Restlet takes care of all
these details.

As I said before, I don't know about Cookie authentication, but I've
successfully setup an authenticator that verifies credentials stored
on JCR. The code is Open Source, you can take a look at the relevant
sources here to 'find inspiration':

http://trac.calenco.com/browser/branches/stable/src/com/calenco/security/JcrVerifier.java
(this is the analog to what your DBVerifier should be)

http://trac.calenco.com/browser/branches/stable/src/com/calenco/CalencoV2App.java
(look around line 221)

Hope this helps. Good luck!

On Mon, Jan 31, 2011 at 1:39 PM, Randy Paries <[email protected]> wrote:
> Fabián,
> sorry i will try to provide more details.
>
> the problem i am having is the what is passed in to
> verify in my DBverify(see below) the secret is encrypted and i did not 
> encrypt it and i do not know where in the process i am doing something 
> incorrect that it is getting encrypted.
>
>
> In my application i have
>
> public Restlet createInboundRoot() {
>
>        Router router = new Router(getContext());
>        router.attach("/", RootServerResource.class);
>        router.attach("/login/{username}/", UserAuthorizationResource.class);
>
>        Router wrouter = new Router(getContext());
>   wrouter.attach("/tb/",testResource.class);
>
>   DBVerifier verifier = new DBVerifier();
>
>   MyAuthenticator authenticator = new
>   MyAuthenticator(getContext(), "Cookie Test");
>   authenticator.setVerifier(verifier);
>   authenticator.setNext(wrouter);
>
>   router.attach("/{userID}", authenticator);
>
>   return router;
> }
> -----------------------------------------------------
> in MyAuthenticator (snippet ):
>
> protected int beforeHandle(Request request,
>                           Response response) {
>
> /*passwd is not encrypted here*/
> request.setChallengeResponse(new ChallengeResponse( 
> ChallengeScheme.HTTP_BASIC, username, passwd  ));
>
> return super.beforeHandle(request, response);
>
> }
>
> -----------------------------------------------------
> public class DBVerifier extends SecretVerifier  {
>
>  public boolean verify(java.lang.String identifier,
>                       char[] secret) {
>
>   System.out.println("identifier=["+identifier+"] 
> secret=["+secret.toString()+"]");
>
>        return true;
>    }
> }
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>> Hello Randy,
>>
>> you usually know the hash function to encrypt the secret to persist in
>> encrypted in the DB.
>>
>> So, you just need to get the secret from the request, apply that
>> hash/encryption function, and compare it with the already encrypted
>> value you read from the DB, in the Verifier's verify() implementation.
>>
>> Maybe you are encrypting the password twice somehow?
>>
>> I couldn't fully understand what you wrote. What you 'cannot get
>> anything useful from'?
>>
>> Hope the above helps guide you in the right direction...
>>
>> On Sat, Jan 29, 2011 at 3:43 PM, Randy Paries <rtparies at gmail dot com> 
>> wrote:
>> > Fabian,
>> > i am getting closer,  but i am one step away i think.
>> >
>> > each time my service is called i pass in an encrypted string
>> >
>> > I decrypt it and in my ChallengeAuthenticator i have
>> > request.setChallengeResponse(
>> >        new ChallengeResponse( ChallengeScheme.HTTP_COOKIE, keyArray[1], 
>> > keyArray[2].toCharArray()  ));
>> >
>> > here is my problem
>> >
>> > I have created a class DBVerifier extends SecretVerifier
>> >
>> > i was assuming in the verify method i would query the DB and authenticate, 
>> > but the secret is in a format that i can not get anything useful from.
>> >
>> > in the authenticator request.getChallengeResponse().getSecret() gives me 
>> > what i need, so i know the correct value is in there.
>> >
>> > thanks for your patience and insight
>> >
>> > randy
>> >
>> >
>> >
>> >> Hello Randy,
>> >>
>> >> indeed your custom Verifier will have to query the DB on each request
>> >> to, well, verify, the provided credentials are valid. You can also
>> >> build an in-memory (provided the passwords are stored on the DB
>> >> already encrypted, to tighten security a bit) credentials 'cache'
>> >> which is populated (reading from the DB) when the system starts, and
>> >> then your custom Verifier can query that credentials cache instead of
>> >> the DB.
>> >>
>> >> As you can see, Restlet is very flexible and provides you with many
>> >> possibilities to handle authentication. OTOH, that flexibility means a
>> >> little more work on your side to implement the authentication
>> >> 'architecture' the way you want or need it.
>> >>
>> >> On Wed, Jan 26, 2011 at 7:46 PM, Randy Paries <rtparies at gmail dot com> 
>> >> wrote:
>> >> > Fabian ,
>> >> > thanks for the response.
>> >> >
>> >> > that helped, i am now getting closer.
>> >> >
>> >> > So there is one last part i am not getting.
>> >> >
>> >> > from the book there is the example "
>> >> > //snippet
>> >> >
>> >> > @Override
>> >> > public Restlet createInboundRoot() {
>> >> >
>> >> >  Router router = new Router(getContext());
>> >> >  MapVerifier verifier = new MapVerifier();
>> >> >            verifier.getLocalSecrets().put("scott",
>> >> >                               "tiger".toCharArray());
>> >> >
>> >> >  CookieAuthenticator authenticator =
>> >> >    new CookieAuthenticator(getContext(), "Cookie Test");
>> >> >
>> >> > //end snippet
>> >> >
>> >> > My usernames and passwords are in a DB
>> >> > So is the flow, each time someone makes a request I need to query and 
>> >> > get the username/password so i can put it into the verifier? I am 
>> >> > thinking that after they login i will generate somekind of key based on 
>> >> > their username/password and that is what will be passed back and forth 
>> >> > or set as a cookie.
>> >> >
>> >> > thanks for your help
>> >> >
>> >>
>> >>
>> >>
>> >> --
>> >> Fabián Mandelbaum
>> >> IS Engineer
>> >
>>
>>
>>
>> --
>> Fabián Mandelbaum
>> IS Engineer
>



-- 
Fabián Mandelbaum
IS Engineer

------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2701818

Reply via email to