Hi John,
 
I'm puzzled as well. If the header is present it should work.
 
It sounds like it is an issue with the way Mule is integrated with Restlet. 
Have you tried contacting the Mule mailing list?
 
Best regards,
Jerome Louvel
--
Restlet ~ Founder and Lead developer ~  <http://www.restlet.org/> 
http://www.restlet.org
Noelios Technologies ~ Co-founder ~  <http://www.noelios.com> 
http://www.noelios.com

 
  _____  

De : John Prystash [mailto:[email protected]] 
Envoye : lundi 26 janvier 2009 23:33
A : [email protected]
Objet : Re: [restlet-user] Retrieving Credentials sent by HttpClient


I do see an Authorization header:

DEBUG  - org.restlet.http.headers:[Accept: */*, Authorization: Basic 
aGFyYm9yOmhhcmJvcg==, Host: localhost:28080, User-Agent:
Noelios-Restlet-Engine/1.1..1]



  _____  

From: John Prystash <[email protected]>
To: [email protected]
Sent: Monday, January 26, 2009 5:12:54 PM
Subject: Re: [restlet-user] Retrieving Credentials sent by HttpClient


To follow-up some more...
I tried using the Restlet Client code provided by the example in the tutorial
(http://www.restlet.org/documentation/1.1/tutorial#part09) and went back to 
using my Guard extension.  In short, the
ChallengeResponse() appears to always be null when coming through the Mule 
Restlet Transport (unless of course I'm missing
something).

    @Override
    public int authenticate(Request request) {
        ChallengeResponse cr = request.getChallengeResponse();
        if (cr == null) {
            logger.debug("ChallengeResponse is NULL");
        }
        ...
    }

Iterating through getSecrets() above gives me the Secrets I set up in my 
Application class.  Also, getScheme() returns HTTP_BASIC.

Could I possibly be missing a step that invokes the ChallengeResponse from the 
client?  My relevant client code:

    Client client = new Client(Protocol.HTTP)
    Request request = new Request(Method.GET, uri)

    ChallengeScheme scheme = ChallengeScheme.HTTP_BASIC
    ChallengeResponse authentication = new ChallengeResponse(scheme, username, 
password)
    request.setChallengeResponse(authentication)

    Response response = client.handle(request)


Sorry to keep pinging here, but I'm running out of ideas :)

  _____  

From: John Prystash <[email protected]>
To: [email protected]
Sent: Monday, January 26, 2009 10:47:01 AM
Subject: Re: [restlet-user] Retrieving Credentials sent by HttpClient


To follow-up, I tried following the example found in the tutorial and let the 
standard Guard class handle the authentication
(http://www.restlet.org/documentation/1.1/tutorial#part09).

In my Application extension:



        Guard guard = new Guard(getContext(), ChallengeScheme.HTTP_BASIC, 
REALM);

        guard.getSecrets().put("john", "john".toCharArray());

        guard.setNext(MyResource.class);




In my client, I set the credentials as before:




        def credentials = new UsernamePasswordCredentials("john", "john") 


And I get a 401.  So with this simpler approach where Guard.authenticate() is 
being invoked, the credentials from HttpClient do not
seem to get noticed:



Credentials:

Username: harbor

Password: harbor

 

Response received.

Status: 401

 

Response Body:

<html>

<head>

   <title>Status page</title>

</head>

<body>

<h3>The request requires user authentication</h3><p>You can get technical 
details <a
href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2";>here</a>.<br>

Please continue your visit at our <a href="/">home page</a>.

</p>

</body>

</html>



  _____  

From: John Prystash <[email protected]>
To: [email protected]
Sent: Sunday, January 25, 2009 5:40:06 PM
Subject: [restlet-user] Retrieving Credentials sent by HttpClient



Hi, I'm trying to retrieve the credentials set in by HttpClient in my Restlet 
service.
I'm using Mule 2.0.2 with 1.1.3 of the Mule Restlet Transport (uses Restlet 
1.1.1).

In my Guard class, request.getChallengeResponse() is return null.

My Guard extension:

    public class MyGuard extends Guard {
        
        @Override
        public int authenticate(Request request) {
             ...
             ChallengeResponse cr = request.getChallengeResponse(); // is null 
here
             ...
        }
    }

My Application class:

    public class MyApplication extends Application {                
        @Override
        public Restlet createRoot() {
            Guard guard = new MyGuard(getContext(), ChallengeScheme.HTTP_BASIC, 
"someRealm");
            guard.setNext(MyResource.class);
            ...
        }
    }

I'm using HttpClient 3.1 (with Groovy) as my users will be:

    def client = new HttpClient()
    def httpMethod = new GetMethod(uri)

    def authScope = new AuthScope(null, -1, "someRealm")
    def credentials = new UsernamePasswordCredentials(username, password) 

    client.getState().setCredentials(authScope, credentials);

    // these lines print out what I expect
    println "Username: " + 
client.getState().getCredentials(authScope).getUserName()
    println "Password: " + 
client.getState().getCredentials(authScope).getPassword()

    httpMethod.setDoAuthentication(true)
    statusCode = client.executeMethod(httpMethod);

I found a similar posting here:
http://markmail.org/message/6n7hjc3pmbg7vcg5#query:restlet%20httpclient%20credentials+page:1+mid:5y3ldjbvcvwxaysp+state:results

Thanks for advance for any insight.

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

Reply via email to