【问题标题】:WSO2 API Manager Config issue with Surf OAuth as Third Party KeyManager将 Surf OAuth 作为第三方密钥管理器的 WSO2 API 管理器配置问题
【发布时间】:2016-08-22 04:58:38
【问题描述】:

我正在尝试使用 Surf OAuth 作为第三方密钥管理器和 WSO2 API 管理器。遵循https://docs.wso2.com/display/AM1100/Configuring+a+Third-Party+Key+Manager的文档

我的问题是,当我在 api-manager.xml 中添加 Surf OAuth 的配置时,WSO2 API 管理器在尝试读取配置时会出现 NPE。看起来它在某些系统属性上爆炸了,例如 CARBON_HOME 和抛出 NPE。

其他人在 WSO2 API Manager 和 Surf OAuth 集成方面遇到过类似问题吗?我很好奇为什么即使按照一步一步的指示它也不起作用

这是我的 api-manager.xml 配置

    <APIKeyManager>
    <KeyManagerClientImpl>nl.surfnet.demo.SurfOAuthClient</KeyManagerClientImpl>
    <Configuration>
        <RegistrationEndpoint>http://myserver:8080/admin/resourceServer/101</RegistrationEndpoint>
        <AccessToken>4a3aa6a5-8f37-4267-8911-0e3049ccee86</AccessToken>
        <IntrospectionURL>http://myserver:8080/v1/tokeninfo</IntrospectionURL>
        <ConsumerKey>1ff100f0-3e10-43cc-af2f-129d6a638739</ConsumerKey>
        <ConsumerSecret>3a79061f-4fa9-4d4e-bb6b-3af38e6a6733</ConsumerSecret>
    </Configuration>
</APIKeyManager>

还有堆栈跟踪

[2016-03-22 16:07:36,381] 错误 - APIKeyMgtServiceComponent 无法初始化密钥管理服务。 org.wso2.carbon.apimgt.api.APIManagementException:解析配置时发生意外错误:/opt/wso2am-1.10.0/repository/conf/api-manager.xml 在 org.wso2.carbon.apimgt.impl.APIManagerConfiguration.load(APIManagerConfiguration.java:112) 在 org.wso2.carbon.apimgt.keymgt.internal.APIKeyMgtServiceComponent.activate(APIKeyMgtServiceComponent.java:88) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.eclipse.equinox.internal.ds.model.ServiceComponent.activate(ServiceComponent.java:260) 在 org.eclipse.equinox.internal.ds.model.ServiceComponentProp.activate(ServiceComponentProp.java:146) 在 org.eclipse.equinox.internal.ds.model.ServiceComponentProp.build(ServiceComponentProp.java:345) 在 org.eclipse.equinox.internal.ds.InstanceProcess.buildComponent(InstanceProcess.java:620) 在 org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:197) 在 org.eclipse.equinox.internal.ds.Resolver.getEligible(Resolver.java:343) 在 org.eclipse.equinox.internal.ds.SCRManager.serviceChanged(SCRManager.java:222) 在 org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:107) 在 org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:861) 在 org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) 在 org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:819) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:771) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:214) 在 org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:433) 在 org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:451) 在 org.wso2.carbon.identity.thrift.authentication.internal.ThriftAuthenticationServiceComponent.activate(ThriftAuthenticationServiceComponent.java:110) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.eclipse.equinox.internal.ds.model.ServiceComponent.activate(ServiceComponent.java:260) 在 org.eclipse.equinox.internal.ds.model.ServiceComponentProp.activate(ServiceComponentProp.java:146) 在 org.eclipse.equinox.internal.ds.model.ServiceComponentProp.build(ServiceComponentProp.java:345) 在 org.eclipse.equinox.internal.ds.InstanceProcess.buildComponent(InstanceProcess.java:620) 在 org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:197) 在 org.eclipse.equinox.internal.ds.Resolver.getEligible(Resolver.java:343) 在 org.eclipse.equinox.internal.ds.SCRManager.serviceChanged(SCRManager.java:222) 在 org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:107) 在 org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:861) 在 org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) 在 org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:819) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:771) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:214) 在 org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:433) 在 org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:451) 在 org.wso2.carbon.core.init.CarbonServerManager.initializeCarbon(CarbonServerManager.java:514) 在 org.wso2.carbon.core.init.CarbonServerManager.start(CarbonServerManager.java:219) 在 org.wso2.carbon.core.internal.CarbonCoreServiceComponent.activate(CarbonCoreServiceComponent.java:94) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.eclipse.equinox.internal.ds.model.ServiceComponent.activate(ServiceComponent.java:260) 在 org.eclipse.equinox.internal.ds.model.ServiceComponentProp.activate(ServiceComponentProp.java:146) 在 org.eclipse.equinox.internal.ds.model.ServiceComponentProp.build(ServiceComponentProp.java:345) 在 org.eclipse.equinox.internal.ds.InstanceProcess.buildComponent(InstanceProcess.java:620) 在 org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:197) 在 org.eclipse.equinox.internal.ds.Resolver.getEligible(Resolver.java:343) 在 org.eclipse.equinox.internal.ds.SCRManager.serviceChanged(SCRManager.java:222) 在 org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:107) 在 org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:861) 在 org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) 在 org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:819) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:771) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130) 在 org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:214) 在 org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:433) 在 org.eclipse.equinox.http.servlet.internal.Activator.registerHttpService(Activator.java:81) 在 org.eclipse.equinox.http.servlet.internal.Activator.addProxyServlet(Activator.java:60) 在 org.eclipse.equinox.http.servlet.internal.ProxyServlet.init(ProxyServlet.java:40) 在 org.wso2.carbon.tomcat.ext.servlet.DelegationServlet.init(DelegationServlet.java:38) 在 org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1284) 在 org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1197) 在 org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087) 在 org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5262) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5550) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565) 在 java.util.concurrent.FutureTask.run(FutureTask.java:262) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:745) 引起:java.lang.NullPointerException 在 org.wso2.carbon.apimgt.impl.utils.APIUtil.replaceSystemProperty(APIUtil.java:3946) 在 org.wso2.carbon.apimgt.impl.APIManagerConfiguration.readChildElements(APIManagerConfiguration.java:160) 在 org.wso2.carbon.apimgt.impl.APIManagerConfiguration.readChildElements(APIManagerConfiguration.java:265) 在 org.wso2.carbon.apimgt.impl.APIManagerConfiguration.load(APIManagerConfiguration.java:92) ... 83 更多

【问题讨论】:

  • 您的配置似乎正确,但是您的 api-manager.xml 文件中存在 XML 语法错误。您可以验证该 XML 文件并查看。

标签: wso2 api-manager


【解决方案1】:

APIM 最新版本 (1.10.0) 不支持文档中提供的 Surf-oauth 客户端实现。因此,您需要进行以下更改才能解决此问题。

  • 更改 SurfOAuthClient.java 文件以导入 org.wso2.carbon.apimgt.impl.AbstractKeyManager 类而不是 org.wso2.carbon.apimgt.keymgt.AbstractKeyManager 类。

    导入 org.wso2.carbon.apimgt.impl.AbstractKeyManager;

  • 在 pom.xml 文件中将“org.wso2.carbon.apimgt”组 id 的版本更改为 5.0.3,如下所示。

    <dependency>
           <groupId>org.wso2.carbon.apimgt</groupId>
           <artifactId>org.wso2.carbon.apimgt.impl</artifactId>
           <version>5.0.3</version>
    </dependency>
    
    <dependency>
           <groupId>org.wso2.carbon.apimgt</groupId>
           <artifactId>org.wso2.carbon.apimgt.gateway</artifactId>
           <version>5.0.3</version>
    </dependency>
    
    <dependency>
           <groupId>org.wso2.carbon.apimgt</groupId>
           <artifactId>org.wso2.carbon.apimgt.keymgt</artifactId>
           <version>5.0.3</version>
    </dependency>
    
    <dependency>
           <groupId>org.wso2.carbon.apimgt</groupId>
           <artifactId>org.wso2.carbon.apimgt.hostobjects</artifactId>
           <version>5.0.3</version>
    </dependency>
    

固定代码也请参考[1]。构建代码,生成war文件和jar文件。 从 /repository/components/lib 和 /repository/components/dropins 文件夹中删除当前的 gateway.client-1.0.0.jar 文件,并将生成的 jar 文件复制到 /repository/components/lib 文件夹中。

使用生成的war文件并再次进行配置。

[1]https://github.com/jaadds/surf-oauth-demo/tree/v1.10.0

【讨论】:

  • 谢谢。我刚刚从 github 获取了 v1.10.0 演示客户端代码,现在我能够启动 wso2 API 管理器而没有错误。仍然需要验证 Surf OAuth 令牌问题部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
  • 2017-07-27
相关资源
最近更新 更多