Approuter之间的链接-mta.yaml-xs-security.json

2020-08-16 12:14发布

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

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


大家好,

在我的应用程序中,我正在使用多个服务,一个approuter以及xsuaa身份验证方法(SAP ID身份验证服务)。 这些服务受到限制,一个需要开发人员角色,另一个需要经过身份验证的用户。
如果我在本地启动approuter并在私有窗口中启动该应用程序,那么我将转到SAP ID登录页面。 与我的用户登录后,我便可以使用该应用程序(因为我将开发者角色应用于我的用户,并且成功登录后,我也是经过身份验证的用户)。
但是,如果我将应用程序部署到SCP并启动approuter,我仍将转到SAP ID登录页面。 成功登录后,我将转到我的应用开始页面。 奇怪的是,我无法使用该应用程序。 当我检查检查器时,我发现尝试访问服务时收到403-禁止错误。

我的假设是mta.yaml,xs-security.json和approuter之间的某些链接出错。 由于我可以登录,但似乎无法识别开发人员角色。

感谢任何提示! 此外,在xs-security.json(在开头)和mta.yaml文件(在结尾)中,我写了一些问题(标有"-")。

干杯,
索尔斯滕

approuter:

 {
     " welcomeFile":"/img/app/",
     " authenticationMethod":"路由",
     "路线":[
       {
         " source":" ^/app/(.*)$",
         " target":" $ 1",
         " localDir":" ./"
       },
       {
         " source":" ^/getPerson/(.*)$",
         " target":" $ 1",
         " destination":" srv-binding"
       },
       {
         " source":" ^(。*)$",
         " target":" $ 1",
         " destination":" srv-binding",
         "范围": [
           " $ XSAPPNAME.developer"
         ]
       }
     ]
 }
 
approuters的package.json
 {
   " name":" plt-app-approuter",
   "依赖关系":{
     " @ sap/approuter":" ^ 7.1.2",
     " @ sap/xsenv":" ^ 2.2.0",
     " @ sap/xssec":" ^ 2.2.5"
   },
   "脚本":{
     " start":"节点-检查node_modules/@sap/approuter/approuter.js"
   }

 

xs-security.json

 {
   " xsappname":" plt-app",-应该指向approuter名称'plt-app-approuter'吗?
   " tenant-mode":"专用",-它描述JWT令牌如何转发吗?
   "范围":[
     {
       " name":" $ XSAPPNAME.developer",
       " description":"开发人员"
     }
   ],
   "属性":[],
   "角色模板":[
     {
       " name":" plt_app_dev",
       " description":"生成",
       "范围参考":[
         " $ XSAPPNAME.developer"
       ],
       "属性引用":[]
     }
   ],
   "角色集合":
   [
     {
       " name":" plt_app",
       "角色模板参考":[
         " $ XSAPPNAME.plt_app_dev"
       ]
     }
   ]
 }
 

mta.yaml

 ##基于模板版本0.2.0生成的mta.yaml
 ## appName = plt-app
 ## language = nodejs;  multiTenant = false
 ## approuter =
 _schema-version:'3.1'
 ID:plt-app
 版本:1.0.5
 描述:"一个简单的CAP项目。"
 参数:
   启用并行部署:true
  
  
 构建参数:
   之前:
    -建设者:自定义
      命令:
       -npm安装
       -npx cds构建

 模块:
  #---------------------服务器模块------------------------
  -名称:plt-app-srv
  #-------------------------------------------------  -----------
    类型:nodejs
    路径:srv
    特性:
      退出:1#由deploy.js任务终止
    要求:
     #从CAP配置中提取的资源
     -名称:plt-hdi-container
     -名称:plt-app-uaa
    提供:
     -名称:CAP服务使用者(例如approuter)所需的srv-binding#
       特性:
         srv-url:$ {default-url}

  #-------------------- SIDECAR模块------------------------
  -名称:plt-app-db
  #-------------------------------------------------  -----------
    类型:hdb
    路径:db
    参数:
      应用名称:plt-app-db
    要求:
     #从CAP配置中提取的'hana'和'xsuaa'资源
     -名称:plt-hdi-container
     -名称:plt-app-uaa
  ################################################  ##########

   ############## APP ########################
  -名称:plt-app-approuter
    类型:approuter.nodejs
    路径:应用
    参数:
       记忆体:256M
    构建参数:
      要求:
        -名称:plt-app-srv
    要求:
     -名称:plt-app-uaa
     -名称:srv-binding
       组:目的地
       特性:
          forwardAuthToken:true
          名称:srv-binding
          网址:〜{srv-url}

 资源:
  #从CAP配置中提取的服务
  #'service-plan'可以通过'cds.requires。 .vcap.plan'进行配置
 #-------------------------------------------------  -----------
  -名称:plt-hdi-container
 #-------------------------------------------------  -----------
    类型:com.sap.xs.hdi-container #Beschreibt HANA DB
    参数:
      服务:在试用环境中使用" hannatrial"或" hanatrial"
      服务计划:hdi共享
    特性:
      hdi-service-name:$ {service-name}

 #-------------------------------------------------  -----------
  -名称:plt-app-uaa
    类型:org.cloudfoundry.managed-service
    参数:
     ##### xs-security.json的路径以添加角色和作用域####
      路径:./gen/xs-security.json
      服务:xsuaa
      服务计划:应用
      配置:
        xsappname:plt-app-$ {space}-比xs-security.json中的xsappname优先吗?
        租户模式:专用

 

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

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


大家好,

在我的应用程序中,我正在使用多个服务,一个approuter以及xsuaa身份验证方法(SAP ID身份验证服务)。 这些服务受到限制,一个需要开发人员角色,另一个需要经过身份验证的用户。
如果我在本地启动approuter并在私有窗口中启动该应用程序,那么我将转到SAP ID登录页面。 与我的用户登录后,我便可以使用该应用程序(因为我将开发者角色应用于我的用户,并且成功登录后,我也是经过身份验证的用户)。
但是,如果我将应用程序部署到SCP并启动approuter,我仍将转到SAP ID登录页面。 成功登录后,我将转到我的应用开始页面。 奇怪的是,我无法使用该应用程序。 当我检查检查器时,我发现尝试访问服务时收到403-禁止错误。

我的假设是mta.yaml,xs-security.json和approuter之间的某些链接出错。 由于我可以登录,但似乎无法识别开发人员角色。

感谢任何提示! 此外,在xs-security.json(在开头)和mta.yaml文件(在结尾)中,我写了一些问题(标有"-")。

干杯,
索尔斯滕

approuter:

 {
     " welcomeFile":"/img/app/",
     " authenticationMethod":"路由",
     "路线":[
       {
         " source":" ^/app/(.*)$",
         " target":" $ 1",
         " localDir":" ./"
       },
       {
         " source":" ^/getPerson/(.*)$",
         " target":" $ 1",
         " destination":" srv-binding"
       },
       {
         " source":" ^(。*)$",
         " target":" $ 1",
         " destination":" srv-binding",
         "范围": [
           " $ XSAPPNAME.developer"
         ]
       }
     ]
 }
 
approuters的package.json
 {
   " name":" plt-app-approuter",
   "依赖关系":{
     " @ sap/approuter":" ^ 7.1.2",
     " @ sap/xsenv":" ^ 2.2.0",
     " @ sap/xssec":" ^ 2.2.5"
   },
   "脚本":{
     " start":"节点-检查node_modules/@sap/approuter/approuter.js"
   }

 

xs-security.json

 {
   " xsappname":" plt-app",-应该指向approuter名称'plt-app-approuter'吗?
   " tenant-mode":"专用",-它描述JWT令牌如何转发吗?
   "范围":[
     {
       " name":" $ XSAPPNAME.developer",
       " description":"开发人员"
     }
   ],
   "属性":[],
   "角色模板":[
     {
       " name":" plt_app_dev",
       " description":"生成",
       "范围参考":[
         " $ XSAPPNAME.developer"
       ],
       "属性引用":[]
     }
   ],
   "角色集合":
   [
     {
       " name":" plt_app",
       "角色模板参考":[
         " $ XSAPPNAME.plt_app_dev"
       ]
     }
   ]
 }
 

mta.yaml

 ##基于模板版本0.2.0生成的mta.yaml
 ## appName = plt-app
 ## language = nodejs;  multiTenant = false
 ## approuter =
 _schema-version:'3.1'
 ID:plt-app
 版本:1.0.5
 描述:"一个简单的CAP项目。"
 参数:
   启用并行部署:true
  
  
 构建参数:
   之前:
    -建设者:自定义
      命令:
       -npm安装
       -npx cds构建

 模块:
  #---------------------服务器模块------------------------
  -名称:plt-app-srv
  #-------------------------------------------------  -----------
    类型:nodejs
    路径:srv
    特性:
      退出:1#由deploy.js任务终止
    要求:
     #从CAP配置中提取的资源
     -名称:plt-hdi-container
     -名称:plt-app-uaa
    提供:
     -名称:CAP服务使用者(例如approuter)所需的srv-binding#
       特性:
         srv-url:$ {default-url}

  #-------------------- SIDECAR模块------------------------
  -名称:plt-app-db
  #-------------------------------------------------  -----------
    类型:hdb
    路径:db
    参数:
      应用名称:plt-app-db
    要求:
     #从CAP配置中提取的'hana'和'xsuaa'资源
     -名称:plt-hdi-container
     -名称:plt-app-uaa
  ################################################  ##########

   ############## APP ########################
  -名称:plt-app-approuter
    类型:approuter.nodejs
    路径:应用
    参数:
       记忆体:256M
    构建参数:
      要求:
        -名称:plt-app-srv
    要求:
     -名称:plt-app-uaa
     -名称:srv-binding
       组:目的地
       特性:
          forwardAuthToken:true
          名称:srv-binding
          网址:〜{srv-url}

 资源:
  #从CAP配置中提取的服务
  #'service-plan'可以通过'cds.requires。 .vcap.plan'进行配置
 #-------------------------------------------------  -----------
  -名称:plt-hdi-container
 #-------------------------------------------------  -----------
    类型:com.sap.xs.hdi-container #Beschreibt HANA DB
    参数:
      服务:在试用环境中使用" hannatrial"或" hanatrial"
      服务计划:hdi共享
    特性:
      hdi-service-name:$ {service-name}

 #-------------------------------------------------  -----------
  -名称:plt-app-uaa
    类型:org.cloudfoundry.managed-service
    参数:
     ##### xs-security.json的路径以添加角色和作用域####
      路径:./gen/xs-security.json
      服务:xsuaa
      服务计划:应用
      配置:
        xsappname:plt-app-$ {space}-比xs-security.json中的xsappname优先吗?
        租户模式:专用

 
付费偷看设置
发送
6条回答
hengyuye
1楼-- · 2020-08-16 12:46

嗨,

您似乎遇到了我昨天遇到的问题。 如果您遵循CAP指南,则会看到以下命令:

 cds编译srv/-至xsuaa> gen/xs-security.json 

然后,如果启动 构建过程会从gen文件夹中删除xs-security.json文件。 在将其打包到MTA文件中之前。 (您可以使用例如winrar进行检查)

我在项目的根目录中生成了xs-security.json文件,并将MTA文件中的路径更改为./xs-security.json而不是。 /gen/xs-security.json。

此后,我再次开始构建过程和MTA打包过程,进行了重新部署,这解决了我的问题。

最好的问候,

Geert-Jan Klaps

CJones
2楼-- · 2020-08-16 12:30

我只是尝试使用略有不同的mta.yaml进行部署。 更具体地说,我尝试在plt-app-uaa服务(而不是在根目录中的xs-security.json)中配置时不进行配置。
在部署过程中,出现以下错误消息:
服务操作失败:控制器操作失败:502更新服务" plt-app-uaa"失败:错误的网关:服务代理错误:服务代理 xsuaa失败,发生以下错误:org.springframework.cloud.servicebroker.exception.ServiceBrokerException:更新应用程序plt-app!t47559时出错(无法通过更新更改AppId。)

lukcy2020
3楼-- · 2020-08-16 12:48

您好,Thorsten,

< p>您的初始设置看起来不错,我怀疑您没有在SCP中设置角色模板分配,因此,您的SAP ID没有所需的范围。

以下是参考链接 :

https://help.sap.com/viewer/ 65de2977205c403bbc107264b8eccf4b/Cloud/zh-CN/eaa6a26291914b348e875a00b6beb729.html

绿领巾童鞋
4楼-- · 2020-08-16 12:31

我刚刚尝试使用略有不同的mta.yaml进行部署。 更具体地说,我尝试在plt-app-uaa服务上不使用配置进行部署(并且在根目录中使用xs-security.json进行部署)。在部署过程中发生了以下错误消息:

服务操作失败:控制器操作失败:502更新服务" plt-app-uaa"失败:错误的网关:服务代理错误:服务代理xsuaa失败,原因:org.springframework.cloud.service.broker.exception.ServiceBrokerException :更新应用程序plt-app!t47559时出错(无法通过更新更改AppId。)


mta.yaml的更新部分

-名称:plt-app-uaa
    类型:org.cloudfoundry.managed-service
    参数:
     ##### xs-security.json的路径以添加角色和作用域####
      路径:./xs-security.json
      服务:xsuaa
      服务计划:应用程序 
路亽曱_Ryan
5楼-- · 2020-08-16 12:40

您好 https://people.sap.com/geert-jan.klaps

感谢您的提示。 我按照您的建议删除了服务,然后重新部署了完整的应用程序。 因此,我更新了default-env和default-services文件中的xsuaa服务的凭据(本地)。

幸运的是,最初的行为没有改变。

干杯,
要加速

hengyuye
6楼-- · 2020-08-16 12:40

嗨, https://people.sap.com/jhodel18

我确实将角色分配给角色模板,然后将角色模板分配给我的信任配置。 即使没有分配的角色,我也应该能够使用一种服务,该服务已分配了超集"已认证用户"。

由于本地原因,在SCP分配的角色上,该应用检测到该角色,并且我能够访问该服务以及具有超集" authenticated-user"的服务。

 console.log(要求用户)
 console.log(req.user.is('developer'))
 

干杯,
索尔斯顿

一周热门 更多>