点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
SAP Cloud SDK专家您好,
在我的示例应用程序 epmbp-consumer-app-java 中 在cds-starter-spring-boot-odata(因为cds-starter-cloudfoundry在SAP之外还无法使用),我想使用SAP Cloud SDK for Java调用内部ABAP后端。 但是似乎此调用未传递Cloud Connector读取用户身份进行主体传播所需的JWT。
在srv模块的日志中,我看到:
由以下原因引起:com.sap.cloud.sdk.datamodel.odata.helper.ODataVdmErrorResultHandler $ ErpODataException:终结点使用HTTP错误代码401进行了响应。 SSO令牌验证失败。 如果令牌尚未过期,请确保在云连接器中正确配置了信任以启用主体传播。
当我激活云连接器中的跟踪时,我看到与上面的调用相对应的以下错误:
2020-03-10 07:09:39,242 + 0100#WARN#com.sap.core.connectivity.tunnel.client.sso.SSOClientProcessor#tunnel-client-18-7#0xbb0af6d9#SSO令牌验证失败: com.sap.core.connectivity.tunnel.client.sso.InvalidSSOTokenException:由于以下原因,无法验证对JWT主体传播的信任: 在com.sap.core.connectivity.tunnel.client.sso.cf.JWTValidator.validateToken(JWTValidator.java:64) 由以下原因引起:java.lang.NullPointerException:尝试调用从com.google.gson.JsonObject.get(java.lang.String)返回的空对象的com.google.gson.JsonElement.getAsString()方法时 在com.sap.core.connectivity.tunnel.client.sso.cf.JWTValidator.createPrincipal(JWTValidator.java:77) 位于com.sap.core.connectivity.tunnel.client.sso.cf.JWTValidator.validateToken(JWTValidator.java:54)
因此,这似乎是基于JavaScript的实现中所必需的服务 .js#L49 读取jwt并将其传递给后端调用:
.build({destinationName:destinationName,jwt:jwt})
在Java实现中,有趣的行在 CatalogService.java#L54 。 使用:
字符串jwt = AuthenticatedUserClaimProvider.INSTANCE.getUserClaim();
我有一种阅读JWT的方法。 但是如何将其传递给SAP Cloud SDK?
最诚挚的问候
格雷戈尔
你好,格雷格,
感谢提出这个问题。
如何在OData调用的标题中手动提供JWT:
https://github.com/gregorwolf/epmbp-consumer-app-java/blob/master/srv/src/main/java/de/linuxdozent/epmbp/handlers/CatalogService.java# L71
最好的问候
Marco
您好 Marco Dahms 和帕布罗·卡塞雷斯,
我在以下位置改写了我的问题:
如何将用户身份验证(JWT)从CAP Java传递到SAP Cloud Java目标实例的SDK吗?
我希望可以弄清楚我想要实现的目标。
最诚挚的问候
Gregor
一周热门 更多>