Hi Ishara,

On 11 March 2016 at 14:27, Ishara Cooray <[email protected]> wrote:

> Hi Malithi/Pushpalanka,
>
> I tried renewing access token by invoking TokenAPi. Below is my CURL.
>
> curl  -d
> "grant_type=refresh_token&refresh_token=87c4145a25f2e72d6d51edce3362f382&scope=PRODUCTION"
> -H "Authorization:Basic
> bTlKZ2dkaXhGOGs3Y09jS1lLcW5ZQU16Q2lBYTphS19meWRraVlmS3k3VXlicEZkMU53eF81WkFh,
> Content-Type: application/x-www-form-urlencoded"
> https://api.cloudstaging.wso2.com:8243/token -v
>

 Headers should be sent separately as given in [1]

[1] https://wso2.org/jira/browse/APIMANAGER-4452

Thanks,
Lakmali

> I get Authentication failed error from the above command and Error Error
> decoding authorization header. Space delimited "<authMethod> <base64Hash>"
> format violated. was observed in the keymanager console where we have APIM
> 1.10.0
> {"error":"invalid_client","error_description":"Client Authentication
> failed."}
>
> Followed the doc [1]. What could have went wrong?
>
> If i use the curl --user Client_Id:Client_Secret as pushpalanka suggested
> i get
> {"error":"invalid_grant","error_description":"Provided Authorization Grant
> is invalid"}
>
>
> Console Log:
>
>  ERROR {org.wso2.carbon.identity.oauth.endpoint.token.OAuth2TokenEndpoint}
> -  Error while extracting credentials from authorization header
> {org.wso2.carbon.identity.oauth.endpoint.token.OAuth2TokenEndpoint}
> org.wso2.carbon.identity.oauth.common.exception.OAuthClientException:
> Error decoding authorization header. Space delimited "<authMethod>
> <base64Hash>" format violated.
>     at
> org.wso2.carbon.identity.oauth.endpoint.util.EndpointUtil.extractCredentialsFromAuthzHeader(EndpointUtil.java:152)
>     at
> org.wso2.carbon.identity.oauth.endpoint.token.OAuth2TokenEndpoint.issueAccessToken(OAuth2TokenEndpoint.java:82)
>     at sun.reflect.GeneratedMethodAccessor185.invoke(Unknown Source)
>     at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>     at java.lang.reflect.Method.invoke(Method.java:606)
>     at
> org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:188)
>     at
> org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:104)
>     at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:204)
>     at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:101)
>     at
> org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)
>     at
> org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:94)
>     at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
>     at
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
>     at
> org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:249)
>     at
> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)
>     at
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)
>     at
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)
>     at
> org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)
>     at
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:289)
>     at
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:209)
>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
>     at
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:265)
>     at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
>     at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>     at
> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
>     at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>     at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>     at
> org.wso2.carbon.ui.filters.CSRFPreventionFilter.doFilter(CSRFPreventionFilter.java:88)
>     at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>     at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>     at
> org.wso2.carbon.ui.filters.CRLFPreventionFilter.doFilter(CRLFPreventionFilter.java:59)
>     at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>     at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>     at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
>     at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
>     at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
>     at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
>     at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
>     at
> org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:99)
>     at
> org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve$1.invoke(CarbonTomcatValve.java:47)
>     at
> org.wso2.carbon.webapp.mgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:57)
>     at
> org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:47)
>     at
> org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:62)
>     at
> org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:159)
>     at
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
>     at
> org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:57)
>     at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
>     at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
>     at
> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
>     at
> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
>     at
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1739)
>     at
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1698)
>     at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>     at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>     at
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
>     at java.lang.Thread.run(Thread.java:744)
>
> [1]https://docs.wso2.com/display/APICloud/Token+API
>
> Ishara Cooray
> Senior Software Engineer
> Mobile : +9477 262 9512
> WSO2, Inc. | http://wso2.com/
> Lean . Enterprise . Middleware
>
> On Wed, Oct 7, 2015 at 11:03 PM, Hasintha Indrajee <[email protected]>
> wrote:
>
>> We have the same logic in few places to extract authorization header (Not
>> only in Oauth).
>>
>> On Wed, Oct 7, 2015 at 10:59 PM, Malithi Edirisinghe <[email protected]>
>> wrote:
>>
>>> Hi Hasintha,
>>>
>>> I don't see any usecase for using multiple authorization header values
>>> here. This is used for OAuth Client Authentication [1]. There we don't have
>>> multiple client credentials right.
>>>
>>> [1] https://tools.ietf.org/html/rfc6749#section-2.3
>>>
>>> On Wed, Oct 7, 2015 at 10:21 PM, Hasintha Indrajee <[email protected]>
>>> wrote:
>>>
>>>> Hi Malithi,
>>>>
>>>> What happens if we include multiple authorization header values in the
>>>> same header ? As [1] says we can use comma separated values for the same
>>>> header values. Is there a valid use case where we can use two authorization
>>>> header values ?. If so we need to handle this within the logic you stated.
>>>>
>>>> [1] http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
>>>>
>>>> On Wed, Oct 7, 2015 at 9:13 PM, Sachith Punchihewa <[email protected]>
>>>> wrote:
>>>>
>>>>> @Malithi,
>>>>> Thank you very much for the detailed explanation.Yes when i was
>>>>> debugging the method extract* "Authorization:Basic xxxxxxxxxxxxxx" -H
>>>>> "Content-Type: application/x-www-form-urlencoded"* and then split
>>>>> it.thanks again for the explanation.
>>>>>
>>>>> Cheers.
>>>>>
>>>>> Kamidu Sachith Punchihewa
>>>>> *Software Engineer*
>>>>> WSO2, Inc.
>>>>> lean . enterprise . middleware
>>>>> Mobile : +94 (0) 770566749 <%2B94%20%280%29%20773%20451194>
>>>>>
>>>>>
>>>>> Disclaimer: This communication may contain privileged or other
>>>>> confidential information and is intended exclusively for the addressee/s.
>>>>> If you are not the intended recipient/s, or believe that you may have
>>>>> received this communication in error, please reply to the sender 
>>>>> indicating
>>>>> that fact and delete the copy you received and in addition, you should not
>>>>> print, copy, retransmit, disseminate, or otherwise use the information
>>>>> contained in this communication. Internet communications cannot be
>>>>> guaranteed to be timely, secure, error or virus-free. The sender does not
>>>>> accept liability for any errors or omissions.
>>>>>
>>>>> On Wed, Oct 7, 2015 at 8:59 PM, Malithi Edirisinghe <[email protected]
>>>>> > wrote:
>>>>>
>>>>>> Hi Sachith,
>>>>>>
>>>>>> Here EndpointUtil.extractCredentialsFromAuthzHeader() method expects
>>>>>> the value of the 'Authorization' header. Please refer [1]. Here the value
>>>>>> of the 'Authorization' header is passed to the method which is directly
>>>>>> taken from the servlet request.
>>>>>> And when decoding the header it expects the value to be in
>>>>>> '<authMethod> <base64Hash>' format.
>>>>>>
>>>>>> So actually what's wrong here is the curl you have posted. It should
>>>>>> be like below.
>>>>>>
>>>>>> curl -k -d "grant_type=password&username=admin&password=admin" -H
>>>>>> "Authorization:Basic xxxxxxxxxxxxxx" -H "Content-Type:
>>>>>> application/x-www-form-urlencoded"
>>>>>> https://localhost:9443/oauth2/token
>>>>>>
>>>>>> So this adds the two headers properly.
>>>>>> In your case the value of the 'Authorization' header is 'Basic
>>>>>> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, Content-Type:
>>>>>> application/x-www-form-urlencoded' which is not in the expected format.
>>>>>> That's why you see the error 'Error decoding authorization header.
>>>>>> Space delimited \"<authMethod> <base64Hash>\" format violated.'
>>>>>>
>>>>>> Further, if you try out the curl command that Pushpalanka has posted
>>>>>> you will note that it works.
>>>>>>
>>>>>> [1]
>>>>>> https://github.com/wso2/carbon-identity/blob/master/components/oauth/org.wso2.carbon.identity.oauth.endpoint/src/main/java/org/wso2/carbon/identity/oauth/endpoint/token/OAuth2TokenEndpoint.java#L86
>>>>>>
>>>>>> Thanks,
>>>>>> Malithi.
>>>>>>
>>>>>>
>>>>>> On Wed, Oct 7, 2015 at 5:57 PM, Sachith Punchihewa <[email protected]
>>>>>> > wrote:
>>>>>>
>>>>>>> Hi All,
>>>>>>>
>>>>>>> @Pushpalanka I used that then it gives me an error indicating
>>>>>>> "Client Authentication failed".
>>>>>>>
>>>>>>> This issues was not there in the IS 5.0.0. I did a debugging and
>>>>>>> found the issue. I have send a pull request regarding this.
>>>>>>>
>>>>>>> Thanks and Regards.
>>>>>>> Kamidu Sachith Punchihewa
>>>>>>> *Software Engineer*
>>>>>>> WSO2, Inc.
>>>>>>> lean . enterprise . middleware
>>>>>>> Mobile : +94 (0) 770566749 <%2B94%20%280%29%20773%20451194>
>>>>>>>
>>>>>>>
>>>>>>> Disclaimer: This communication may contain privileged or other
>>>>>>> confidential information and is intended exclusively for the 
>>>>>>> addressee/s.
>>>>>>> If you are not the intended recipient/s, or believe that you may have
>>>>>>> received this communication in error, please reply to the sender 
>>>>>>> indicating
>>>>>>> that fact and delete the copy you received and in addition, you should 
>>>>>>> not
>>>>>>> print, copy, retransmit, disseminate, or otherwise use the information
>>>>>>> contained in this communication. Internet communications cannot be
>>>>>>> guaranteed to be timely, secure, error or virus-free. The sender does 
>>>>>>> not
>>>>>>> accept liability for any errors or omissions.
>>>>>>>
>>>>>>> On Wed, Oct 7, 2015 at 5:47 PM, Pushpalanka Jayawardhana <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> Optionally, can you try with below command format and check,
>>>>>>>>
>>>>>>>> curl --user Client_Id:Client_Secret  -k -d
>>>>>>>> "grant_type=password&username=admin&password=admin" -H
>>>>>>>> "Content-Type:application/x-www-form-urlencoded"
>>>>>>>> https://localhost:9443/oauth2/token
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Pushpalanka.
>>>>>>>> --
>>>>>>>> Pushpalanka Jayawardhana, B.Sc.Eng.(Hons).
>>>>>>>> Senior Software Engineer, WSO2 Lanka (pvt) Ltd;  wso2.com/
>>>>>>>> Mobile: +94779716248
>>>>>>>> Blog: pushpalankajaya.blogspot.com/ | LinkedIn:
>>>>>>>> lk.linkedin.com/in/pushpalanka/ | Twitter: @pushpalanka
>>>>>>>>
>>>>>>>>
>>>>>>>> On Wed, Oct 7, 2015 at 5:40 PM, Sachith Punchihewa <
>>>>>>>> [email protected]> wrote:
>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>> I am currently using a locally build of IS Server from the latest
>>>>>>>>> code.When i try to get a OAuth Access token via a curl execution i am
>>>>>>>>> getting an error.
>>>>>>>>>
>>>>>>>>> Curl Format used :
>>>>>>>>>
>>>>>>>>> *curl**<SPACE>**-k**<SPACE>**-d**<SPACE>*
>>>>>>>>>> *"grant_type=password&username=userNamepasswork&=**passWord*
>>>>>>>>>> *&tenantDomain=carbon.super"**<SPACE>**-H**<SPACE>*
>>>>>>>>>> *"Authorization:Basic**<SPACE>**Base 64 encoded
>>>>>>>>>> clientID:clientSecret,**<SPACE>**Content-Type:**<SPACE>*
>>>>>>>>>> *application/x-www-form-urlencoded"**<SPACE>**https://localhost:9443/oauth2/token
>>>>>>>>>> <https://localhost:9443/oauth2/token>*
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Actual command :
>>>>>>>>>
>>>>>>>>> curl -k -d
>>>>>>>>>> "grant_type=password&username=xxxxx&password=xxxxx&tenantDomain=carbon.super"
>>>>>>>>>> -H "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
>>>>>>>>>> Content-Type: application/x-www-form-urlencoded"
>>>>>>>>>> https://localhost:9443/oauth2/token
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Error :
>>>>>>>>>
>>>>>>>>> "Error decoding authorization header. Space delimited
>>>>>>>>>> \"<authMethod> <base64Hash>\" format violated."
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Is there is a issue with the curl command i am using here ?
>>>>>>>>>
>>>>>>>>> Thanks and Regards.
>>>>>>>>> Kamidu Sachith Punchihewa
>>>>>>>>> *Software Engineer*
>>>>>>>>> WSO2, Inc.
>>>>>>>>> lean . enterprise . middleware
>>>>>>>>> Mobile : +94 (0) 770566749 <%2B94%20%280%29%20773%20451194>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Disclaimer: This communication may contain privileged or other
>>>>>>>>> confidential information and is intended exclusively for the 
>>>>>>>>> addressee/s.
>>>>>>>>> If you are not the intended recipient/s, or believe that you may have
>>>>>>>>> received this communication in error, please reply to the sender 
>>>>>>>>> indicating
>>>>>>>>> that fact and delete the copy you received and in addition, you 
>>>>>>>>> should not
>>>>>>>>> print, copy, retransmit, disseminate, or otherwise use the information
>>>>>>>>> contained in this communication. Internet communications cannot be
>>>>>>>>> guaranteed to be timely, secure, error or virus-free. The sender does 
>>>>>>>>> not
>>>>>>>>> accept liability for any errors or omissions.
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Dev mailing list
>>>>>>>>> [email protected]
>>>>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Dev mailing list
>>>>>>> [email protected]
>>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>>
>>>>>> *Malithi Edirisinghe*
>>>>>> Senior Software Engineer
>>>>>> WSO2 Inc.
>>>>>>
>>>>>> Mobile : +94 (0) 718176807
>>>>>> [email protected]
>>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Dev mailing list
>>>>> [email protected]
>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Hasintha Indrajee
>>>> Software Engineer
>>>> WSO2, Inc.
>>>> Mobile:+94 771892453
>>>>
>>>>
>>>
>>>
>>> --
>>>
>>> *Malithi Edirisinghe*
>>> Senior Software Engineer
>>> WSO2 Inc.
>>>
>>> Mobile : +94 (0) 718176807
>>> [email protected]
>>>
>>
>>
>>
>> --
>> Hasintha Indrajee
>> Software Engineer
>> WSO2, Inc.
>> Mobile:+94 771892453
>>
>>
>> _______________________________________________
>> Dev mailing list
>> [email protected]
>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>
>>
>


-- 
Lakmali Baminiwatta
Senior Software Engineer
WSO2, Inc.: http://wso2.com
lean.enterprise.middleware
mobile:  +94 71 2335936
blog : lakmali.com
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to