2015-10-28 2 views
1

Я написал службу WSo2 ESB Proxy, где служба прокси-сервера вызывает службу http, опубликованную в WSo2 API Manager. Поскольку API-интерфейсы публикуются в WSo2 API Manager для доступа к API, нам необходимо сгенерировать токен, используя ключ пользователя и секретный ключ. Я вручную вошел в wso2 api manager, я подписался на опубликованный API и с помощью моего потребительского ключа и секретного ключа я создал токен и использую этот токен при вызове API из WSo2 ESB. В заголовке запроса HTTP я установил тот токен и от WSO2 ESB способно вызывать API при получении ответа от API, но этот маркер истекает через 60 минут, поэтому мне нужно, чтобы создать маркер, вызвавДоступ к опубликованным API-интерфейсам API WSO2 API, использующим маркеры из WSO2 ESB, Не удалось получить токен доступа из диспетчера API WSO2

https://api-dev.xyz.org/token 
POST 
Authorization: Basic Zzc5enNRN0xLM0hOcHU2N0g2a2R1dkx6WGRrYTpJSEF1NWZUdW5FdG9BV0xfa1hCcUdvRGVPWmdh 

Payload 
grant_type=client_credentials 

I получите ответ как

response 

{ 
    scope: "default" 
    token_type: "bearer" 
    expires_in: 3171 
    access_token: "db995950f960b4c67162e2d92a1117a5" 
} 

завитка команды, чтобы получить маркер: -

curl -k -d "grant_type=client_credentials" -H "Authorization: Basic Rnl5YmwwNVhacGhBb01mVE5VNE91ZkxfblRVYTpUSmt6QUJFbzZaN3FkNkE1cHE3V3JSd2ZNaHNh, Content-Type: application/x-www-form-urlencoded" https://api-dev.xyz.org:8243/token 

в WSO2 ESB прокси службы я кодированный похож свернуться команду, чтобы получить маркер,

<property xmlns:ns="http://org.apache.synapse/xsd" 

      name="Authorization" 

      expression="fn:concat('Basic ',OUU0Zk05eU81R0VCcV9odUxBYW15SzRCaEZFYToxVmVnbHl5OFBhQTkyMFRxbEUySnduWHlTbThh)" 

      scope="transport"/>   

     <payloadFactory media-type="json"> 

<format> 

{ 

"grant_type":"client_credentials" 

} 

</format> 

</payloadFactory> 

<property name="messageType" value="application/x-www-form-urlencoded" scope="axis2"/> 

      <send> 

      <endpoint> 
<http method="get" uri-template="https://api-dev.xyz.org:8243/token"/> 

      <property name="grant_type" value="client_credentials"/> 

     </endpoint> 

    </send> 

Я получаю ответ, как

TargetHandler I/O error: Host name verification failed for host : 172.18.65.251 
javax.net.ssl.SSLException: Host name verification failed for host : 172.18.65.251 
    at org.apache.synapse.transport.http.conn.ClientSSLSetupHandler.verify(ClientSSLSetupHandler.java:162) 
    at org.apache.http.nio.reactor.ssl.SSLIOSession.doHandshake(SSLIOSession.java:291) 
    at org.apache.http.nio.reactor.ssl.SSLIOSession.isAppInputReady(SSLIOSession.java:391) 
    at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:119) 
    at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:159) 
    at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:338) 
    at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:316) 
    at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:277) 
    at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:105) 
    at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:586) 
    at java.lang.Thread.run(Thread.java:745) 

Любая идея, как решить эту проблему?

ответ

1

Это проблема проверки сертификата. Это происходит, когда сервер не может найти соответствующий сертификат для хоста. Вы можете попробовать один из следующих способов, чтобы исправить это:

  1. Импорт общественности свидетельство о внутреннем интерфейсе (APIM в данном случае), чтобы клиент-доверенное хранилище в ESB. Дополнительная информация об этом here. Для использования в производстве это рекомендуемый подход.
  2. Или установите значение 'HostnameVerifier' к 'AllowAll' в конфигурации отправителя HTTPS транспортной '' /reposotory/conf/axis2/axis2.xml

например:

<transportSender name="https" class="org.apache.synapse.transport.passthru.PassThroughHttpSSLSender"> 
    .... 
    <parameter name="HostnameVerifier">AllowAll</parameter> 
    .... 
</transportSender> 
+0

Благодарности Раджив , я могу получить токен API, сейчас каждый раз из ESB, когда я пытался сделать вызов службы http в API, сначала я делаю вызов, чтобы получить токен https://api-dev.xyz.org: 8243/token, и я использую этот токен в http-заголовке как Authorization: Bearer при вызове API. вместо этого, когда токен истек, тогда мы вызываем getToken или так или иначе хотим проверить что-то вроде ((currentTime - timestampSkew)> (issuTime + validityPeriod), если оно истинно, тогда вызывается getAccess token, любезно помогите –

Смежные вопросы