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

2020-08-21 16:05发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


您好SAP Cloud SDK Java和CAP专家,

我已经创建了一个示例应用程序 epmbp-consumer-app ,该应用程序使用了自定义的OData V2服务 通过主体传播使用SAP Cloud SDK for JavaScript。 因此,通过approuter进行身份验证的用户JWT传递给CAP服务,然后用于后端服务调用:

 .execute({destinationName:destinationName,jwt:jwt})

请参见 srv/service.js#L79 。 我想对适用于Java的SAP Cloud SDK执行相同的操作,但是只有在将目标设置为"基本身份验证"时,它才能正常工作。 将JWT作为标题传递。 com/marco.dahms"> Marco Dahms 不能解决问题。

我可以在哪里传递能够使用以下方法从CAP API中检索到的JWT:

字符串jwt = AuthenticatedUserClaimProvider.INSTANCE.getUserClaim(); 

由SAP Cloud SDK for Java执行的呼叫?

最诚挚的问候
格雷戈尔

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


您好SAP Cloud SDK Java和CAP专家,

我已经创建了一个示例应用程序 epmbp-consumer-app ,该应用程序使用了自定义的OData V2服务 通过主体传播使用SAP Cloud SDK for JavaScript。 因此,通过approuter进行身份验证的用户JWT传递给CAP服务,然后用于后端服务调用:

 .execute({destinationName:destinationName,jwt:jwt})

请参见 srv/service.js#L79 。 我想对适用于Java的SAP Cloud SDK执行相同的操作,但是只有在将目标设置为"基本身份验证"时,它才能正常工作。 将JWT作为标题传递。 com/marco.dahms"> Marco Dahms 不能解决问题。

我可以在哪里传递能够使用以下方法从CAP API中检索到的JWT:

字符串jwt = AuthenticatedUserClaimProvider.INSTANCE.getUserClaim(); 

由SAP Cloud SDK for Java执行的呼叫?

最诚挚的问候
格雷戈尔

付费偷看设置
发送
5条回答
天桥码农
1楼 · 2020-08-21 16:31.采纳回答

Gregor,您好

除了之前建议的手动标头设置外,另一个建议是将VDM调用代码包装到Callable中,然后将其传递到AuthTokenAccessor.executeWithAuthToken()方法中。

例如:

字符串jwtString = AuthenticatedUserClaimProvider.INSTANCE.getUserClaim();
 AuthTokenAccessor.executeWithAuthToken(new AuthToken(JWT.decode(jwtString)),()-> {
  //调用VDM服务的代码在此处。
 });  

如果这不起作用,我唯一的其他建议是尝试Java SDK的3.10.0版本。

最诚挚的问候,
巴勃罗

ZJXianG
2楼-- · 2020-08-21 16:06

你好,格雷戈尔,

我不确定这是否有助于解决您的原始问题

但是请更新您的应用程序以使用SAP Cloud SDK 3.16.1

不再需要提供的解决方法

最好的问候

亚历山大

四川大学会员
3楼-- · 2020-08-21 16:29

嗨,格雷格,

您是否检查了" getUserClaim()"返回的字符串是否包含" Bearer"前缀?
如果没有,则可能需要在将标头传递到Cloud SDK之前添加。

最诚挚的问候,
马克

亦是此间程序员
4楼-- · 2020-08-21 16:20

嗨,马克,

感谢您的回复。 使用最后提交,我已经将JWT的输出添加到了日志中。 看起来像这样:

 JWT:eyJhbGciOiJSUzI1NiIsImpr ... 

所以像在 CatalogService.java#L95 是必需的。

期待您的进一步输入。

最诚挚的问候
格雷戈尔

槿木_熙
5楼-- · 2020-08-21 16:29

您好,格雷格,

感谢您的举报!

请更新您的应用程序以使用最新版本的SAP Cloud SDK 3.16.1

不再需要提供的解决方法

最好的问候

亚历山大

一周热门 更多>