CAP应用程序的目的地

2020-08-17 22:25发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中) CAP专家们! 我开发了一个...

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

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


CAP专家们!

我开发了一个可以通过浏览器正常运行的CAP应用程序。 它包含db,srv,app和approuter模块。 我的服务用@注释(需要:"已验证用户")。

一旦部署到cf,则通过调用approuter要求我登录,然后将我重定向到服务。 因此它可以按预期工作。

从SAP移动卡调用服务时,我的问题开始了。 我的移动服务服务也在Cloud Foundry上运行。

我在移动服务(SAP移动卡/功能/移动连接)中创建了一个指向我的approuter URL的目的地,并选中了sso机制"转发身份验证"和"将用户令牌转发给AppRouter"。 如 https://help.sap.com/viewer/ 468990a67780424a9e66eb096d4345bb/Cloud/zh-CN/c5896a6238ae4f11a4f0d37d483340f0.html

"当为端点配置了转发身份验证SSO机制时,将出现将用户令牌转发到AppRouter复选框。选中该复选框以启用。启用后,用户令牌将作为x-转发到app-router应用程序 approuter-authorization标头。"

正如预期的那样,在移动卡应用程序集上刷新时,我在approuter中的标题x-approuter-authorization中收到了JWT,并且该请求已转发到服务层,但是我总是收到401错误。 该错误带有注释@(requires:'authenticated-user'),因为如果删除该错误,该错误就会消失。 因此,看来approuter收到了jwt,但是服务层不知道如何正确管理它。

有什么建议吗? 我应该在目的地中使用其他sso类型吗?

提前谢谢!

4条回答
Climb_Ma
2020-08-17 22:55 .采纳回答
解决方案:(对某些人来说可能很明显,但是我花了很长时间才找到解决方案:))在我的方案中,SAP Mobile Cards使用CAP服务,两者都在同一个Cloud Foundry子帐户中。 在SAP Mobile Cards中,我创建了一个指向CAP应用程序approuter的目的地,该目的地使用选中的sso机制" Forward Authentication"和" Forward User Token To AppRouter"。 在运行时,SAP Mobile Card的xsuaa实例生成一个JWT,该JWT发送到approuter。 此时,在approuter应用程序日志中获得错误:
"访问令牌的客户端ID" sb-com-sap-mobile-platform-cards-XX-XX-XXXX!t3933"与\ nOAuth客户端ID" sb-XXXXX-XX-XX-XXXX"不匹配 !t3933"。\ n在环境中未指定JWT信任ACL(SAP_JWT_TRUST_ACL)。-路由来源:/^\\/(.*)$/,IP:******,x-approuter-authorization  :******'

也就是说,CAP应用程序的xsuaa不信任生成JWT的ClientId。 我们可以通过以下方式在yaml文件中将SAP_JWT_TRUST_ACL属性添加到approuter来解决此问题:

-名称:s4nabcdef-approuter
     类型:approuter.nodejs
     路径:approuter
     参数:
       磁盘配额:256M
       记忆体:256M
     要求:
       -名称:s4nabcdef-uaa
       -名称:srv_api
         组:目的地
         特性:
           forwardAuthToken:true
           名称:srv_api
           strictSSL:假
           网址:"〜{url}"
     特性:
       SAP_JWT_TRUST_ACL:
        -客户编号:" *"
          identityzone:" *"
 

使用上述方法,错误消失并且请求到达服务层。

问题解决了吗? 没门。 如果我们再试一次,现在是服务层以401进行响应,但是在这种情况下,没有其他消息可指导我们实现该解决方案。 这是当您怀疑CAP应用程序正常工作时,但是不,这与approuter中的原因完全相同。 将属性SAP_JWT_TRUST_ACL属性添加到srv模块中,即可使用。

-名称:s4nabcdef-srv
     类型:nodejs
     路径:srv
     参数:
       内存:512M
       磁盘配额:512M
     提供:
       -名称:srv_api
         特性:
           网址:$ {default-url}
     要求:
       -名称:s4nabcdef-db-hdi-container
       -名称:s4nabcdef-uaa
       -名称:s4nabcdef_destination
       -名称:s4nabcdef_connectivity
     特性:
       SAP_JWT_TRUST_ACL:
        -客户编号:" *"
          identityzone:" *" 

我希望这可以帮助某人。

最诚挚的问候,

Marc

一周热门 更多>