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条回答
nice_wp
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)

最诚挚的问候
格雷戈尔

一周热门 更多>