[ 
https://issues.apache.org/jira/browse/AMBER-61?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13505290#comment-13505290
 ] 

Sampo Niskanen commented on AMBER-61:
-------------------------------------

This is rather simple to implement.  I took the source code to the HttpClient4 
class 
(http://svn.apache.org/viewvc/incubator/amber/trunk/oauth-2.0/httpclient4/src/main/java/org/apache/amber/oauth2/httpclient4/HttpClient4.java?view=co).
  It contains logic to add the headers from the "headers" argument to the HTTP 
request, before it I added:

            if (request.getHeaders() != null) {
                for (Map.Entry<String, String> header : 
request.getHeaders().entrySet()) {
                    req.setHeader(header.getKey(), header.getValue());
                }
            }

This allowed me to use HTTP basic authentication as indicated in the original 
report.  (There are some nuances, for example what to do if headers in the 
request and argument clash, but they're edge cases.  You shouldn't be adding 
custom headers that clash with the OAuth protocol in any case.)

URLConnectionClient seems to have identical logic, though I haven't tested it 
myself:  
http://svn.apache.org/viewvc/incubator/amber/trunk/oauth-2.0/client/src/main/java/org/apache/amber/oauth2/client/URLConnectionClient.java?view=co
                
> Client defined HTTP headers in OAuthClientRequest
> -------------------------------------------------
>
>                 Key: AMBER-61
>                 URL: https://issues.apache.org/jira/browse/AMBER-61
>             Project: Amber
>          Issue Type: Bug
>          Components: OAuth 2.0 - Client
>    Affects Versions: 0.22
>            Reporter: Peter Turcsanyi
>            Assignee: Antonio Sanso
>              Labels: newbie
>
> HTTP headers added to OAuthClientRequest are not sent with the HTTP request.
> I would like to use HTTP Basic authentication at the token endpoint.
> So on the client side I add "Authorization" HTTP header to OAuthClientRequest 
> calling its setHeader() method.
> But headers set on the OAuthClientRequest object are not processed by 
> OAuthClient.accessToken() / URLConnectionClient.execute(), therefore they are 
> not sent to the authorization server.
> Or is there any other way to use HTTP Basic authentication between the client 
> and the token endpoint of the authorization server?
> The client code:
> {code}
> OAuthClientRequest tokenRequest = OAuthClientRequest
>         .tokenLocation("https://...";)
>         .setGrantType(GrantType.AUTHORIZATION_CODE)
>         .setClientId("...")
>         .setClientSecret("...")
>         .setRedirectURI("https://...";)
>         .setCode(authzCode)
>         .buildBodyMessage();
> if (tokenRequest.getHeaders() == null) {
>     tokenRequest.setHeaders(new HashMap<String, String>()); // nice-to-have 
> issue: it should be initialized inside OAuthClientRequest at creation time or 
> at first call of setHeader()
> }
> tokenRequest.setHeader("Authorization", "..."); // main issue: header never 
> used later
> OAuthClient oAuthClient = new OAuthClient(new URLConnectionClient());
> OAuthJSONAccessTokenResponse tokenResponse = 
> oAuthClient.accessToken(tokenRequest);
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to