403禁止错误mobilefirst平台
Posted
技术标签:
【中文标题】403禁止错误mobilefirst平台【英文标题】:403 forbidden error mobilefirst platform 【发布时间】:2015-11-02 13:01:56 【问题描述】:我创建了一个启用了安全性的 MobileFirst 适配器。我生成了令牌,当我尝试调用 API 时,我收到 403 Forbidden 错误。在本地主机上同样有效,但在服务器上部署时会出现此错误。我在下面附上了来自 REST 客户端的屏幕截图。
我使用的是 MFP 7.0.0 版本
403 Error from REST Client
日志文件:
[11/2/15 5:24:57:786 CST] 000049b7 com.ibm.ws.webcontainer.util.ApplicationErrorUtils E SRVE0777E:应用程序类“org.apache.wink.server.internal.RequestProcessor”抛出异常.handleRequest:195' javax.servlet.ServletException:java.lang.NoClassDefFoundError:com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException 在 org.apache.wink.server.internal.RequestProcessor.handleRequest(RequestProcessor.java:195) 在 org.apache.wink.server.internal.servlet.RestServlet.service(RestServlet.java:119) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:668) 在 com.worklight.adapters.rest.JAXRSSandbox$2.doFilter(JAXRSSandbox.java:377) 在 com.worklight.adapters.rest.FilterChainImpl.doFilter(FilterChainImpl.java:84) 在 com.worklight.adapters.rest.JAXRSSandbox.handleRequest(JAXRSSandbox.java:382) 在 com.worklight.adapters.rest.RESTAdaptersServiceServlet.doService(RESTAdaptersServiceServlet.java:69) 在 com.worklight.adapters.rest.RESTAdaptersServlet.service(RESTAdaptersServlet.java:64) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:668) 在 com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1285) 在 com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:776) 在 com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:473) 在 com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:135) 在 com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:74) 在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:978) 在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1100) 在 com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:81) 在 com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:912) 在 com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:262) 在 com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:955) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1157) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:627) 在 java.lang.Thread.run(Thread.java:863) 引起:java.lang.NoClassDefFoundError: com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException 在 java.lang.Class.forNameImpl(本机方法) 在 java.lang.Class.forName(Class.java:253)
【问题讨论】:
你有任何代码给我们吗? 您是否在 application-descriptor.xml 中定义了范围领域? @Idan 是的,我在 authenticationConfig.xml 中定义了范围领域,我使用的是 MFP 7.0.0。 【参考方案1】:我已经深入调查了这个问题,因为我们需要通过 REST 客户端调用受 @OuathSecurity 保护的新 Java 适配器(JAX-RS 实现)。
但我需要问你几个问题才能给你更好的答案:
这是您需要的场景吗? 您是否使用此文档生成令牌 https://www-01.ibm.com/support/knowledgecenter/SSHS8R_7.1.0/com.ibm.worklight.dev.doc/dev/c_non_mobile_to_mobile_services.html?lang=en或者您正在使用测试令牌端点?
【讨论】:
是的,我想通过rest客户端调用一个java适配器。 API 受@OAuthSecurity(scope="default")
保护,我在 MFP 项目(在 Eclipse 中)的 server/conf 下的 authenticationConfig.xml 中定义了领域“默认”。我使用来自本地主机的 authentication/v1/testtoken url 生成了测试令牌。我正在使用 MFP 7.0.0 版本。在标头中添加令牌并在连接到 localhost 时在 REST 客户端中运行后,我得到了 API 响应。但是在专用服务器上部署后同样不起作用。
很遗憾这不起作用的简短回答,适配器(启用了安全性)被构建为接收由两部分组成的令牌 1)访问令牌 2)ID 令牌(设备信息的数字签名等作为模型,平台,设备ID),您将无法获得,因为您将从非移动上下文中调用
-分析服务使用此信息来记录带有此设备信息的适配器调用(从 ID 令牌中提取)-此外,测试令牌仅存在于开发环境中,它的 ID 令牌包含有关虚拟设备的信息
我们按照此链接www-01.ibm.com/support/knowledgecenter/SSHS8R_7.1.0/… 生成了一个有效的访问令牌以将其与 REST 客户端调用一起使用,它成功并通过了安全性,但它不包含 ID 令牌(设备信息)所以它抛出与尝试记录空设备信息的分析服务相关的错误代码 500(内部服务器错误)我没有找到任何方法来生成 ID 令牌,因为它是由客户端生成的
您可以尝试使用我提到的链接生成有效的访问令牌,并使用测试令牌中的ID令牌(测试令牌包含访问令牌+用空格分隔的ID令牌),但我是不确定它会起作用,因为根据文档的测试令牌仅适用于开发环境。以上是关于403禁止错误mobilefirst平台的主要内容,如果未能解决你的问题,请参考以下文章