我在stackoverflow上关注了许多链接并尝试了许多解决方案,但它们都没有为我工作.我正在使用WSO2 API manager版本1.9.1.我正面临以下错误:
Exception in thread "main" javax.net.ssl.SSLPeerUnverifiedException: Host name 'XXXXXXXXX' does not match the certificate subject provided by the peer (CN=localhost, O=WSO2, L=Mountain View, ST=CA, C=US)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.verifyHostname(SSLConnectionSocketFactory.java:465)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:395)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:353)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:134)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107)
at com.java.pushNotifications.WSO2DemoClient.main(WSO2DemoClient.java:49)
Run Code Online (Sandbox Code Playgroud)
我开发了以下Java代码.请帮我解决这里出了什么问题.我需要连接不安全的方式,并允许连接到没有证书的 SSL站点.
public static void main(String[] args) throws ClientProtocolException, IOException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
SSLContextBuilder builder = new SSLContextBuilder();
builder.loadTrustMaterial(null, …Run Code Online (Sandbox Code Playgroud) java ssl ssl-certificate apache-httpclient-4.x wso2-api-manager
我想明白之间的差别grant_type=client_credentials,并grant_type=password在Authentication或OAuth2 Flow概念.我关注以下网站:
我相信grant_type=password在not secure这样只要使用gran_type的JavaScript开发.但我还是有些人可以帮助理解这个概念.
我还观察到,grant_type=client_credentials不提供" refresh_token",它只是提供了access_token 其中的grant_type=password同时提供了access_token和refresh_token.
希望得到详细的解释.我正在使用WSO2 API ManagerOAuth2进行应用程序开发
我有一个API,要求租户作为标题.
如果我按顺序创建自定义:
<sequence name="WSO2AM--Ext--In">
<header
name="X-Tenant-Id"
scope="transport"
action="set"
expression="???????????????????"
/>
</sequence>
Run Code Online (Sandbox Code Playgroud)
有没有我可以用来实现这个目的的表达式?或者我应该创建一个per-API中介来设置它?
PS:看看WSO2源代码(CarbonTenantInfoConfigurator.java),我发现这个片段可以作为一个提示:
PrivilegedCarbonContext cc = PrivilegedCarbonContext.getThreadLocalCarbonContext();
String tenantDomain = cc.getTenantDomain();
int tenantId = cc.getTenantId();
messageContext.setProperty("tenant.info.domain", tenantDomain);
messageContext.setProperty("tenant.info.id", tenantId);
Run Code Online (Sandbox Code Playgroud)
但是,如果可能的话,我不知道如何在自定义序列中访问这些属性.
我目前正在开发一个我在其API管理器上部署的Jaggery应用程序.
从Jaggery后端我使用此处记录的方法调用SOAP Web服务,该方法指定:
<%
var url = 'http://jaggeryjs.org/apidocs/resources/home.jag';
var xhr = new XMLHttpRequest();
xhr.open("GET", url);
xhr.setRequestHeader("user" , "madhuka");
xhr.send();
print("ReadyState : "+xhr.readyState);
print("<br>ResponseStatus : "+xhr.status);
print("<br>ResponseText : "+xhr.responseText);
%>
Run Code Online (Sandbox Code Playgroud)
我已经完成所有工作并且工作正常,但是我想删除硬编码的URL并将其替换为基于环境的某种URL查找.
这样做的正确方法是什么?我可以在API管理器中指定端点并参考它吗?或者也许使用EPR文件.从这个意义上讲,我对Jaggery文档的运气不大.
curl -X GET --header 'Accept: application/json' --header 'Authorization: Bearer 90d2c018-73d1-324b-b121-a162cf870ac0' 'https://172.17.0.1:8243/V1.0.2/stock/getNA?name=te'
Run Code Online (Sandbox Code Playgroud)
终端提示
"curl:(51)SSL:证书使用者名称(localhost)与目标主机名"172.17.0.1"不匹配
Howerver,在我将"172.17.0.1"更改为"localhost"后,它工作并获得了结果.
为什么?是不是有错误的配置?同时,http_access.log中没有登录.
在后端 Web 服务位于单独的服务器上并且需要确定给定请求通过 APIM 网关身份验证和授权机制的情况下,验证 JWT 是否由特定 API 管理器实例发出的推荐方法是什么?
我知道 JWT 中的标头字段包含一个“x5t”字段,它是对租户密钥存储中证书的编码引用,详情如下:
https://asankastechtalks.wordpress.com/2013/12/05/obtaining-certificate-used-to-sign-a-jwt/
由于后端 Web 服务位于单独的服务器上,我们是否需要以某种方式将公钥分发给它?另外,我们如何更新用于签署 JWT 的证书,因为它现在使用的是默认值?
此错误正在WSO2 API Manager wso2carbon.log中打印.
sun.security.ssl.SSLSocketFactoryImpl.createSocket(SSLSocketFactoryImpl.java:88)
at org.wso2.carbon.databridge.agent.endpoint.binary.BinarySecureClientPoolFactory.createClient(BinarySecureClientPoolFactory.java:53)
... 9 more
TID: [-1] [] [2016-12-28 22:16:04,043] ERROR {org.wso2.carbon.databridge.agent.endpoint.DataEndpointConnectionWorker} - Error while trying to connect to the endpoint. Cannot borrow client for ssl://192.168.1.36:9711 {org.wso2.carbon.databridge.agent.endpoint.DataEndpointConnectionWorker}
org.wso2.carbon.databridge.agent.exception.DataEndpointAuthenticationException: Cannot borrow client for ssl://192.168.1.36:9711
at org.wso2.carbon.databridge.agent.endpoint.DataEndpointConnectionWorker.connect(DataEndpointConnectionWorker.java:100)
at org.wso2.carbon.databridge.agent.endpoint.DataEndpointConnectionWorker.run(DataEndpointConnectionWorker.java:43)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.wso2.carbon.databridge.agent.exception.DataEndpointException: Error while opening socket to 192.168.1.36:9711. Connection refused: connect
at org.wso2.carbon.databridge.agent.endpoint.binary.BinarySecureClientPoolFactory.createClient(BinarySecureClientPoolFactory.java:58)
at org.wso2.carbon.databridge.agent.client.AbstractClientPoolFactory.makeObject(AbstractClientPoolFactory.java:39)
at org.apache.commons.pool.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:1212)
at org.wso2.carbon.databridge.agent.endpoint.DataEndpointConnectionWorker.connect(DataEndpointConnectionWorker.java:92)
... 6 more
Caused by: java.net.ConnectException: Connection refused: …Run Code Online (Sandbox Code Playgroud) 如何禁用 WSO2 Api Manager(admin/gw/其他组件)的 HTTPS?我们希望在前端负载均衡器上终止 SSL,而不是在终端 WSO2 产品上终止 SSL。如果我访问端口 9763,我将被重定向到 9443。我们正在运行使用 docker-images 部署的 2.1.0。
我在WSO2 API Manager中配置了一个API,允许多种不同的OAuth 2.0授权类型(客户端凭据和openid).
我的API需要不同的行为,具体取决于它是通过客户端凭据生成的access_token还是openid来调用的.API如何验证提供的访问令牌是通过客户端凭据还是openid生成的?
编辑和解决方案:
我找到了一种方法来做到这一点.以下WSO2文档显示了如何配置API Manager以传递包含某些特定于令牌的信息的JWT.在该令牌中,您将找到" http://wso2.org/claims/usertype "声明.如果您的api是通过客户端凭证授予类型访问的,那么如果通过openid或SAML访问它,它的值将是APPLICATION,它将是APPLICATION_USER.我没有找到专门概述这种情况的文档,但似乎有效.
我正在尝试更新通过 API Manager 生成的令牌。
生成令牌的 curl 语句是:
curl -k -d "grant_type=client_credentials" -H "Authorization: Basic TDQ0SktDZm5DcVVDSVBjdGYwVDIyRWwwUGY4YT
o2d19NQm9xYnBFXzRLNHR0Wkc0NXhxd0NMTDRh , Content-Type: application/x-www-form-urlencoded" https://10.108.106.214:8250/token
Run Code Online (Sandbox Code Playgroud)
回应是
"scope":"am_application_scope default","token_type":"bearer","expires_in":1094,"access_token":"6d1d0f8afbd147d24bcd42bbc5361a1"
Run Code Online (Sandbox Code Playgroud)
根据文档,它应该生成一个未生成的重新令牌。我错过了什么?
同样,当我将 grant_type 作为 refresh_token 传递时。我收到无效授权错误。
curl -X POST -H "Authorization: Basic TDQ0SktDZm5DcVVDSVBjdGYwVDIyRWwwUGY4YTo2d19NQm9xYnBFXzRLNHR0Wkc0NXhxd0NMTDRh" -H "Content-Type: application/x-www-form-urlencoded" -d 'grant_type=refresh_token&refresh_token=6d1d0f8afbd147d24bcd42bbc5361a1' 'https://10.108.106.214:8250/token'
Run Code Online (Sandbox Code Playgroud)
我指的是 URL https://docs.wso2.com/display/AM191/Token+API#TokenAPI-RenewingaccesstokensRenewing 中的文档
那么我错过了什么?
wso2-api-manager ×10
wso2 ×8
wso2carbon ×3
api-manager ×2
java ×2
oauth-2.0 ×2
wso2esb ×2
jaggery-js ×1
jwt ×1
ssl ×1
validation ×1
web-services ×1
wso2is ×1