You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@oltu.apache.org by "Sampo Niskanen (JIRA)" <ji...@apache.org> on 2012/11/28 09:14:58 UTC

[jira] [Commented] (AMBER-61) Client defined HTTP headers in OAuthClientRequest

    [ 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