Cloud Foundry门户HTML5 Apps回购授权

2020-08-15 14:46发布

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

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


大家好,

我在Cloud Foundry上创建了一个HTML.5应用程序,该应用程序存储在HTML5 Apps Repo中,并且可以通过启动板模块进行访问。

从启动板中的HTML5应用程序调用后端(Node.js应用程序)时,后端返回未经授权的401。
当直接通过App Router访问后端(Node.js应用程序)时,用户 首先重定向到登录屏幕,成功登录后即可访问后端。

我是否需要进行其他任何配置才能从启动板应用程序通过应用程序路由器访问后端。

应用路由器xs-app.json

 {
     " authenticationMethod":"路由",
     " welcomeFile":"/cp.portal",
     "路线":[
         {
             " source":" ^/api/v4/(.*)$",
             " target":" $ 1",
             "目的地":" api-service",
             " authenticationType":" xsuaa",
             " csrfProtection":false
         },
         {
             " source":" ^(/.*)",
             " target":" $ 1",
             " service":" html5-apps-repo-rt",
             " authenticationType":" xsuaa"
         }
     ]
 }
 

HTML5模块xs-app.json

 {
     " welcomeFile":"/index.html",
     " authenticationMethod":"路由",
     "登出": {
         " logoutEndpoint":"/img/do/logout"
     },
     "路线":[
         {
             " source":" ^/api/(.*)$",
             " target":"/img/api/$ 1",
             "目标":" DevAppRouter",
             " authenticationType":" xsuaa",
             " csrfProtection":false
         },
         {
             " source":" ^(。*)$",
             " target":" $ 1",
             " service":" html5-apps-repo-rt",
             " authenticationType":" xsuaa"
         }
     ]
 }
 

Dest Destination DevAppRouter破坏了Service实例zum Destination Service ertell中的开发空间。

后端的server.js

 ...
 var护照= require('passport');
 var xsenv = require('@ sap/xsenv');
 var JWTStrategy = require('@ sap/xssec')。JWTStrategy;
 ...
 var app = express();
 var services = xsenv.getServices({uaa:{标签:" xsuaa"}});
 护照。使用(新的JWTStrategy(services.uaa));
 app.use(passport.initialize());
 app.use(passport.authenticate('JWT',{session:false}))); 

配置mta.yaml

-名称:api-service
       类型:nodejs
       路径:modules/api-service/srv
       参数:
           磁盘配额:512M
           记忆体:256M
       提供:
           -名称:api-service
             特性:
                 网址:$ {default-url}
       要求:
           -名称:应用程序日志
           -名称:hdi-container
           -名称:uaa
           -名称:Connectivity-tunnel
           -名称:目的地
 -名称:app-router
       类型:approuter.nodejs
       路径:scp/app-router
       参数:
           磁盘配额:256M
           记忆体:128M
           SAP_JWT_TRUST_ACL:[{" clientId":" *"," identityzone":" *"}]
       要求:
           -名称:api-service
             组:目的地
             特性:
                 forwardAuthToken:true
                 strictSSL:假
                 名称:api-service
                 网址:〜{url}
           -名称:frontend-portal-resources
           -名称:frontend-html5-repo-runtime
             特性:
                 forwardAuthToken:true
           -名称:应用程序日志
           -名称:uaa
           -名称:Connectivity-tunnel
           -名称:目的地
       特性:
           SEND_XFRAMEOPTIONS:否
 

xs-security.json

 {
     " xsappname":" DemoApp",
     "租户模式":"专用",
     " description":"被调用应用程序的安全配置文件",
     "范围":[
         {
             " name":" uaa.user",
             "描述":" UAA"
         }
     ],
     "角色模板":[
         {
             " name":" Token_Exchange",
             " description":" UAA",
             " scope-references":[" uaa.user"]
         }
     ]
 }
 

(19.0 kB)

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

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


大家好,

我在Cloud Foundry上创建了一个HTML.5应用程序,该应用程序存储在HTML5 Apps Repo中,并且可以通过启动板模块进行访问。

从启动板中的HTML5应用程序调用后端(Node.js应用程序)时,后端返回未经授权的401。
当直接通过App Router访问后端(Node.js应用程序)时,用户 首先重定向到登录屏幕,成功登录后即可访问后端。

我是否需要进行其他任何配置才能从启动板应用程序通过应用程序路由器访问后端。

应用路由器xs-app.json

 {
     " authenticationMethod":"路由",
     " welcomeFile":"/cp.portal",
     "路线":[
         {
             " source":" ^/api/v4/(.*)$",
             " target":" $ 1",
             "目的地":" api-service",
             " authenticationType":" xsuaa",
             " csrfProtection":false
         },
         {
             " source":" ^(/.*)",
             " target":" $ 1",
             " service":" html5-apps-repo-rt",
             " authenticationType":" xsuaa"
         }
     ]
 }
 

HTML5模块xs-app.json

 {
     " welcomeFile":"/index.html",
     " authenticationMethod":"路由",
     "登出": {
         " logoutEndpoint":"/img/do/logout"
     },
     "路线":[
         {
             " source":" ^/api/(.*)$",
             " target":"/img/api/$ 1",
             "目标":" DevAppRouter",
             " authenticationType":" xsuaa",
             " csrfProtection":false
         },
         {
             " source":" ^(。*)$",
             " target":" $ 1",
             " service":" html5-apps-repo-rt",
             " authenticationType":" xsuaa"
         }
     ]
 }
 

Dest Destination DevAppRouter破坏了Service实例zum Destination Service ertell中的开发空间。

后端的server.js

 ...
 var护照= require('passport');
 var xsenv = require('@ sap/xsenv');
 var JWTStrategy = require('@ sap/xssec')。JWTStrategy;
 ...
 var app = express();
 var services = xsenv.getServices({uaa:{标签:" xsuaa"}});
 护照。使用(新的JWTStrategy(services.uaa));
 app.use(passport.initialize());
 app.use(passport.authenticate('JWT',{session:false}))); 

配置mta.yaml

-名称:api-service
       类型:nodejs
       路径:modules/api-service/srv
       参数:
           磁盘配额:512M
           记忆体:256M
       提供:
           -名称:api-service
             特性:
                 网址:$ {default-url}
       要求:
           -名称:应用程序日志
           -名称:hdi-container
           -名称:uaa
           -名称:Connectivity-tunnel
           -名称:目的地
 -名称:app-router
       类型:approuter.nodejs
       路径:scp/app-router
       参数:
           磁盘配额:256M
           记忆体:128M
           SAP_JWT_TRUST_ACL:[{" clientId":" *"," identityzone":" *"}]
       要求:
           -名称:api-service
             组:目的地
             特性:
                 forwardAuthToken:true
                 strictSSL:假
                 名称:api-service
                 网址:〜{url}
           -名称:frontend-portal-resources
           -名称:frontend-html5-repo-runtime
             特性:
                 forwardAuthToken:true
           -名称:应用程序日志
           -名称:uaa
           -名称:Connectivity-tunnel
           -名称:目的地
       特性:
           SEND_XFRAMEOPTIONS:否
 

xs-security.json

 {
     " xsappname":" DemoApp",
     "租户模式":"专用",
     " description":"被调用应用程序的安全配置文件",
     "范围":[
         {
             " name":" uaa.user",
             "描述":" UAA"
         }
     ],
     "角色模板":[
         {
             " name":" Token_Exchange",
             " description":" UAA",
             " scope-references":[" uaa.user"]
         }
     ]
 }
 

(19.0 kB)
付费偷看设置
发送
5条回答
打个大熊猫
1楼 · 2020-08-15 15:33.采纳回答

嗨,

我认为这与您使用第一个应用程序路由器中的" api-service"目标和HTML5应用程序路由器中的" DevApprouter"有关。

DevApprouter目标具有NoAuthentication。 如果要将SSO设置为此目的地,请将身份验证类型设置为OAuth2UserTokenExchange。

您可以从以下命令获取

客户端ID和客户端密码:

 $ cf env <您的应用名称>
 

在xsuaa服务的凭据对象中。

令牌服务网址:https:// 。 authentication.eu10。 hana.ondemand.com/oauth/token/alias/ .aws-live-eu10

kr,

Joachim

昵称总是被占用
2楼-- · 2020-08-15 15:43

嗨,西蒙·珀斯托弗

您能告诉我您的HTML5应用程序的mta.yaml吗?

谢谢。

Tri

派大星 ヾ
3楼-- · 2020-08-15 15:31

您好 Tri Le

以下 是mta.yaml

-名称中的一个小样本:migration-app
   类型:html5
   路径:apps/migration-app
   构建参数:
     支持的平台:[]
     制造商:定制
     命令:
       -npm运行构建
     构建结果:dist
 -名称:frontend-ui-deployer
   类型:com.sap.html5.application-content
   路径:scp/frontend-ui-deployer
   参数:
     磁盘配额:512M
     记忆体:128M
   要求:
     -名称:frontend-html5-repo-host
   构建参数:
     要求:
       -名称:migration-app
         工件:
           -" ./*"
         目标路径:resources/migration-app 

注意事项
Simon

Baoming ROSE
4楼-- · 2020-08-15 15:21

您好西蒙·珀斯托弗(Simon Perstorfer)

感谢您的代码。

我已经尝试过,用指向服务api的OAuth2UserTokenExchange设置目标。

但是我收到错误代码:500 Internal Server Error。 不知道以前是否遇到错误。

谢谢。

Tri

风早神人
5楼-- · 2020-08-15 15:27

UPDATE:

将目标的身份验证设置为" NoAuthentication",并将目标的属性forwardAuthToken设置为true也可以完成此工作。

如果目标B指向应用路由器,那么该方法也适用,因此应用路由器是单个入口点。

链接:(我设置了属性forwardAuthToken,而不是HTML5 .ForwardAuthToken)

https://help.sap.com/查看器/65de2977205c403bbc107264b8eccf4b/Cloud/zh-CN/3cc788ebc00e40a091505c6b3fa485e7.html

一周热门 更多>