我在本地设置了WSO2应用程序接口,并将简单的HelloWorld应用程序接口添加到我的本地发布者中,引用此link。然后,我在APIM管理控制台中创建了一个子租户。我启用了所有租户的订阅可用性,请参考此link (我确信我启用了,因为我可以在Publisher中看到选项)。我打开Devportal。在租户开发者门户列表中,我选择carbon.super
(为了查看由超级租户管理员创建的HelloWorld应用程序接口),然后使用我的子租户id和密码登录。我创建了我的应用程序并生成了密钥和密钥。然后,我订阅了由supertenant创建的HelloWorld应用程序接口。一切似乎都很正常。
我可以为上级管理员和下级管理员获取JWT令牌。下面是curl命令:
curl -k -X POST https://localhost:8243/token -d "grant_type=password&username=admin&password=admin&scope=openid" -H "Authorization: Basic N25..."
curl -k -X POST https://localhost:8243/token -d "grant_type=password&username=admin@arda.test&password=12345&scope=openid" -H "Authorization: Basic SjM..."
问题是,当我尝试使用包含超级租户管理员的令牌的请求调用API时,我可以得到200OK响应,但当我尝试使用子租户管理员的JWT令牌时,我会得到以下错误响应:
<ams:fault xmlns:ams="http://wso2.org/apimanager/security">
<ams:code>900900</ams:code>
<ams:message>Unclassified Authentication Failure</ams:message>
<ams:description>Unclassified Authentication Failure</ams:description>
</ams:fault>
当我检查日志时,我看到以下内容:
[2021-06-03 15:42:03,323] ERROR - APIAuthenticationHandler API authentication failure due to Unclassified Authentication Failure
org.wso2.carbon.apimgt.gateway.handlers.security.APISecurityException: Unclassified Authentication Failure
at org.wso2.carbon.apimgt.gateway.handlers.security.APIAuthenticationHandler.isAuthenticate_aroundBody42(APIAuthenticationHandler.java:438) ~[org.wso2.carbon.apimgt.gateway_6.7.206.jar:?]
at org.wso2.carbon.apimgt.gateway.handlers.security.APIAuthenticationHandler.isAuthenticate(APIAuthenticationHandler.java:418) ~[org.wso2.carbon.apimgt.gateway_6.7.206.jar:?]
at org.wso2.carbon.apimgt.gateway.handlers.security.APIAuthenticationHandler.handleRequest_aroundBody36(APIAuthenticationHandler.java:354) [org.wso2.carbon.apimgt.gateway_6.7.206.jar:?]
at org.wso2.carbon.apimgt.gateway.handlers.security.APIAuthenticationHandler.handleRequest(APIAuthenticationHandler.java:325) [org.wso2.carbon.apimgt.gateway_6.7.206.jar:?]
at org.apache.synapse.rest.API.process(API.java:373) [synapse-core_2.1.7.wso2v183.jar:2.1.7-wso2v183]
at org.apache.synapse.rest.RESTRequestHandler.apiProcessNonDefaultStrategy(RESTRequestHandler.java:144) [synapse-core_2.1.7.wso2v183.jar:2.1.7-wso2v183]
at org.apache.synapse.rest.RESTRequestHandler.identifyAPI(RESTRequestHandler.java:164) [synapse-core_2.1.7.wso2v183.jar:2.1.7-wso2v183]
at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:95) [synapse-core_2.1.7.wso2v183.jar:2.1.7-wso2v183]
at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:73) [synapse-core_2.1.7.wso2v183.jar:2.1.7-wso2v183]
at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:331) [synapse-core_2.1.7.wso2v183.jar:2.1.7-wso2v183]
at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:99) [synapse-core_2.1.7.wso2v183.jar:2.1.7-wso2v183]
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) [axis2_1.6.1.wso2v41.jar:?]
at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:367) [synapse-nhttp-transport_2.1.7.wso2v183.jar:?]
at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:188) [synapse-nhttp-transport_2.1.7.wso2v183.jar:?]
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) [axis2_1.6.1.wso2v41.jar:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
at java.lang.Thread.run(Thread.java:834) [?:?]
我使用的curl命令如下:
curl -k -X GET https://localhost:8243/hello/1.0.0 -H "Authorization: Bearer eyJ..."
有什么问题吗?这是一个bug还是我错过了什么?
发布于 2021-06-13 23:54:56
如果你使用的是APIM 3.2.0的普通包(没有wum更新),这是预期的。当我们发布3.2.0版本时,使用新的多km架构,交叉租户订阅功能被弃用。它在一段时间后通过wum更新再次添加到3.2.0中。如果您有wso2订阅,则最新的wum更新包具有此功能,并且正在运行。
此PR(https://github.com/wso2/carbon-apimgt/pull/9793)在4.0.0版本中添加了该功能。
https://stackoverflow.com/questions/67824218
复制相似问题