如何将JWT从CAP Java App传递到SAP Cloud SDK Java后端调用

2020-08-22 08:22发布

         点击此处--->   EasySAP.com群内免费提供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?

最诚挚的问候
格雷戈尔

         点击此处--->   EasySAP.com群内免费提供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?

最诚挚的问候
格雷戈尔

付费偷看设置
发送
2条回答
太Q了
1楼-- · 2020-08-22 08:43

你好,格雷格,

感谢提出这个问题。

如何在OData调用的标题中手动提供JWT:

https://github.com/gregorwolf/epmbp-consumer-app-java/blob/master/srv/src/main/java/de/linuxdozent/epmbp/handlers/CatalogService.java# L71

最好的问候

Marco

lukcy2020
2楼-- · 2020-08-22 08:53

您好 Marco Dahms 帕布罗·卡塞雷斯

我在以下位置改写了我的问题:

如何将用户身份验证(JWT)从CAP Java传递到SAP Cloud Java目标实例的SDK吗?

我希望可以弄清楚我想要实现的目标。

最诚挚的问候
Gregor

一周热门 更多>