CDS/CAP/Node.js无法使XSUAA在本地工作

2020-08-15 16:35发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)亲爱的社区, 我试图在开发过程...

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

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


亲爱的社区,

我试图在开发过程中在本地运行CAP/Node.js应用时通过SCP的XSUAA服务进行身份验证。

我已按照 https://cap.cloud.sap/docs/上的说明进行操作 node.js/authentication 将基于JWT的身份验证构建到我的CAP应用程序中。 当我将应用程序部署到SCP时,身份验证可以正常进行。 但是,当我尝试在本地运行相同的应用程序并在default-env.json中提供XSUAA服务时,服务组件会在控制台日志中返回403,且登录尝试失败。

为了测试这一点,我从头开始构建了一个准系统应用程序。 您可以在此处查看实施:

https://github.com/manuelseeger/cap-auth-xsuaa

当部署到SCP审判中时,这工作得很好。 我已将CA_Admin范围分配给分配给我的用户的角色集合。 当我访问SCP中的approuter组件时,它将转发我登录并在受保护的服务可用之后。

当我在本地尝试相同操作时,approuter还会将我转发到SCP登录屏幕。 JWT令牌按预期返回。 但是,服务组件返回403。

服务日志:

应用路由器的日志:

在如上所述记录JWT令牌之前,应用路由器会在日志中打印以下内容:

#2.0#2020 03 17 13:06:18:854#+ 01:00#INFO#/Auth/OAuth2 ###### k7vupaze #### c46AFZAVSeyC34rlCLyuB-pGfQubl3NM ####### k7vupaze#PLAIN  ## req.url:/#
 #2.0#2020 03 17 13:06:18:855#+ 01:00#INFO#/Auth/OAuth2 ###### k7vupaze ##### c46AFZAVSeyC34rlCLyuB-pGfQubl3NM ####### k7vupaze#PLAIN ## sending 客户端重定向到https://s0015861181trial.authentication.eu10.hana.ondemand.com/oauth/authorize?response_type=code&client_id=sb-cap-auth-xsuaa!t38354&redirect_uri=http%3A%2F%2Flocalhost%3A5000  %2Flogin%2Fcallback#
 #2.0#2020 03 17 13:06:18:855#+ 01:00#INFO#/Auth/OAuth2 ###### k7vupaze #### c46AFZAVSeyC34rlCLyuB-pGfQubl3NM ###### k7vupaze#PLAIN ## x  -forwarded-path标头:undefined#
 

我已从SCP上应用程序的approuter组件复制了VCAP_SERVICES环境变量,并将其复制到CAP应用程序的根目录和app/目录中的default-env.json中。

我的default-env.json看起来像这样:

 {
     "目的地":[
         {
             " name":" srv-binding",
             " url":" http://localhost:4004",
             " forwardAuthToken":是,
             " strictSSL":false
         }
     ],
     " VCAP_SERVICES":{
         " xsuaa":[
          {
           " binding_name":null,
           "凭据":{
            " apiurl":" https://api.authentication.eu10.hana.ondemand.com",
            " clientid":" sb-cap-auth-xsuaa!t38354",
            " clientsecret":"省略",
            " identityzone":" s0015861181trial",
            " identityzoneid":" cfeeccea-a2c7-4284-b65f-ab1f13f02699",
            " sburl":" https://internal-xsuaa.authentication.eu10.hana.ondemand.com",
            " tenantid":" cfeeccea-a2c7-4284-b65f-ab1f13f02699",
            " tenantmode":"专用",
            " uaadomain":" authentication.eu10.hana.ondemand.com",
            " url":" https://s0015861181trial.authentication.eu10.hana.ondemand.com",
            " verificationkey":" ----- BEGIN PUBLIC KEY ----- [省略] ----- END PUBLIC KEY -----",
            " xsappname":" cap-auth-xsuaa!t38354"
           },
           " instance_name":" cap-auth-xsuaa-uaa",
           " label":" xsuaa",
           " name":" cap-auth-xsuaa-uaa",
           "计划":"申请",
           "提供者":null,
           " syslog_drain_url":null,
           "标签":[
            " xsuaa"
           ],
           " volume_mounts":[]
          }
         ]
        }
 }

 

这似乎可以解决问题,因为我从SCP获得登录屏幕,并且可以登录并接收我的JWToken。 但是本地运行的服务只是不接受它,并继续返回403。

您知道如何使XSUAA身份验证在本地工作吗? 我已经为此工作了好几天了,似乎没有办法解决问题。

最诚挚的问候,

Manuel

(38.6 kB)
付费偷看设置
发送
7条回答
zhangjiyang1323
1楼 · 2020-08-15 17:20.采纳回答

大家好,

看来我终于设法解决了。 我检查了cds env,发现auth.passport.strategy如果在本地运行,则设置为模拟。 这让我有些惊讶,因为我没有在任何地方配置模拟策略,据我了解的文档,应该从已安装的@ sap/xssec软件包中扣除JWT策略。

https://cap。 cloud.sap/docs/node.js/authentication#how-the-authentication-strategy-如何被检测到

我现在添加了一个.cdsrc.json文件,其中包含该策略的显式配置:

 {
     " auth":{
         "护照":{
             " strategy":" JWT"
         }
     }
 }
 

这似乎可以解决问题。 该服务现在接受JWToken。

也许有人可以解释为什么在这种情况下无法隐式检测JWT策略吗?

最诚挚的问候,

Manuel

路亽曱_Ryan
2楼-- · 2020-08-15 17:22

您好 Manuel Seeger

我已为我更新了答案,其中提供了我们所面临问题的更多详细信息。

希望这次对您来说更有意义。

最诚挚的问候,
伊万(Ivan)

nice_wp
3楼-- · 2020-08-15 17:16

嗨,曼努埃尔(

),您的CAP Service的package.json是否包含auth.passport.stratey部分:

" cds":  {
 "要求":{
 "D b": {
 " kind":" hana",
 " model":" gen/csn.json"
 }
 },
 " auth":{
 "护照":{
 " strategy":" JWT"
 }
 }
 }
 

类似于我的示例项目: package.json #L27 ? 在调试过程中,我找到了此参数。 我认为必须将其添加到文档基于令牌的身份验证(JWT)

最诚挚的问候
格雷戈尔

土豆飞人
4楼-- · 2020-08-15 17:26

你好,格雷戈尔·沃尔夫,

我正面临着同样的问题。 尽管我已经在package.json文件中添加了代码块(由您建议)。

还更新了default-env.json,其中包含从应用路由器复制的目的地和xsuaa属性(作为CF中的应用)

谢谢。

此致

Sandeep

lukcy2020
5楼-- · 2020-08-15 17:15

嗨,曼努埃尔,您是否在srv文件夹的package.json中包含了" @ sap/xsenv"和" @ sap/xssec"的依赖项?

# p#

我刚刚尝试过,但这没什么区别。 该服务仍然返回403,并在受保护的资源上记录未成功的登录尝试。

歪着头看世界
6楼-- · 2020-08-15 17:10

嗨,曼努埃尔,

您正在使用哪个@ sap/cds版本?

似乎不包括范围。 我不知道为什么与Cloud Foundry相比有区别。 您是否尝试过使用环境变量`NODE_ENV = production`?

感谢和问候,
大卫

lukcy2020
7楼-- · 2020-08-15 17:20

嗨大卫,

我正在运行@ sap/cds @ 3.31.2。 您能否扩大不包括范围的含义? 如果您的意思是,它们将包含在JWToken中。

您的意思是在生产配置文件中本地运行吗? 此操作失败,并显示 [ERROR] VError:没有服务与xsuaa 匹配。 在Object.getServices(/Users/manuels/Documents/ccscp/capm_auth/cap-auth-xsuaa/node_modules/@sap/xsenv/lib/xsservices.js:50:15)

最诚挚的问候,

Manuel

一周热门 更多>