使用Cloud Foundry目标服务的多租户

2020-08-16 12:48发布

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

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


大家好,

我能够在Cloud Foundry上部署多租户应用程序。
在nodejs应用程序中,我可以显示当前用户和租户ID。
下一步是在我的提供商帐户中共享目标服务,以便能够 读取我的消费者帐户中的目的地。

我将为您提供我的子帐户的概述:

1。 提供者租户:在此帐户上,我部署了多租户应用程序,并将其注册到saas服务中。
2.有一个目标服务链接到approuter和目标服务。 消费者租户1:我已在提供者租户中订阅了该应用程序,并且能够打开该应用程序。


3。 消费者租户2:我已在提供商租户中订阅了该应用程序,并且能够打开该应用程序。


我使用approuter的订阅中间件来实现回调项。
当我检查订阅时,可以看到它们成功完成并且共享了目标服务。

现在我创建了3个名为SEARCHENGINE的目的地

针对提供商租户:

对于消费者租户1:

对于消费者租户2:

在提供者租户上的nodejs应用中,我希望能够读取消费者租户上的目标配置。

因此,我在应用程序中创建了一条新路由。

 router.get('/dest/:destinationName',异步函数(req,res,next){
   尝试{
     const destinationName = req.params.destinationName;
     const destination = readDestination(destinationName);
     res.status(200).json(目的地);
   } catch(错误){
     console.error("错误!");
     console.error(错误);
     console.error("结束错误!");
     res.status(400).send(错误);
   }
 });

 

readDestination函数正在读取环境变量,获取目标服务凭据并调用目标服务api。

unfourtunat,https:///srv/dest/SEARCHENGINE和https:///srv/dest/SEARCHENGINE的结果是相同的 。 它们返回提供者租户的目标配置:

 {
   "所有者":{
     " SubaccountId":" ",
     " InstanceId":null
   },
   " destinationConfiguration":{
     "名称":" SEARCHENGINE",
     " Type":" HTTP",
     " URL":" https://default.com",
     " Authentication":" NoAuthentication",
     " ProxyType":" Internet"
   }
 }
 

当我从提供商帐户中删除目标位置时,会从目标服务中收到404错误。

退订并重新订阅无济于事。

这是目标服务在mta中的声明:

 #DESTINATION
  -名称:saas_dest_service
    类型:目的地
    参数:
       服务计划:精简版
       共享:真实

 

我的nodejs应用程序环境变量:

"目标":[
    {
     " binding_name":null,
     "凭据":{
      " clientid":" sb-克隆********!b20897 | destination-xsappname!b404",
      " clientsecret":" ******** =",
      " identityzone":" testdpi",
      " instanceid":" a83ade9d-8c3b-4a1f-a0d8-f8e0bcf35858",
      " tenantid":" ",
      " tenantmode":"专用",
      " uaadomain":" authentication.eu10.hana.ondemand.com",
      " uri":" https://destination-configuration.cfapps.eu10.hana.ondemand.com",
      " url":" https://testdpi.authentication.eu10.hana.ondemand.com",
      " verificationkey":"-****-",
      " xsappname":"克隆*******!b20897 | destination-xsappname!b404"
     },
     " instance_name":" saas_dest_service",
     " label":"目的地",
     " name":" saas_dest_service",
     "计划":"精简版",
     "提供者":null,
     " syslog_drain_url":null,
     "标签":[
      "目的地",
      " conn",
      " connsvc"
     ],
     " volume_mounts":[]
    }
   ],
 

如您所见,目标服务的租户模式是专用的。 这是正确的吗?

我如何使这个承租人知道?

我认为我必须在目标服务呼叫的请求中将当前的tenantId添加到某个地方,但是我不知道在哪里。

kr,

Joachim

(50.9 kB)

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

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


大家好,

我能够在Cloud Foundry上部署多租户应用程序。
在nodejs应用程序中,我可以显示当前用户和租户ID。
下一步是在我的提供商帐户中共享目标服务,以便能够 读取我的消费者帐户中的目的地。

我将为您提供我的子帐户的概述:

1。 提供者租户:在此帐户上,我部署了多租户应用程序,并将其注册到saas服务中。
2.有一个目标服务链接到approuter和目标服务。 消费者租户1:我已在提供者租户中订阅了该应用程序,并且能够打开该应用程序。


3。 消费者租户2:我已在提供商租户中订阅了该应用程序,并且能够打开该应用程序。


我使用approuter的订阅中间件来实现回调项。
当我检查订阅时,可以看到它们成功完成并且共享了目标服务。

现在我创建了3个名为SEARCHENGINE的目的地

针对提供商租户:

对于消费者租户1:

对于消费者租户2:

在提供者租户上的nodejs应用中,我希望能够读取消费者租户上的目标配置。

因此,我在应用程序中创建了一条新路由。

 router.get('/dest/:destinationName',异步函数(req,res,next){
   尝试{
     const destinationName = req.params.destinationName;
     const destination = readDestination(destinationName);
     res.status(200).json(目的地);
   } catch(错误){
     console.error("错误!");
     console.error(错误);
     console.error("结束错误!");
     res.status(400).send(错误);
   }
 });

 

readDestination函数正在读取环境变量,获取目标服务凭据并调用目标服务api。

unfourtunat,https:///srv/dest/SEARCHENGINE和https:///srv/dest/SEARCHENGINE的结果是相同的 。 它们返回提供者租户的目标配置:

 {
   "所有者":{
     " SubaccountId":" ",
     " InstanceId":null
   },
   " destinationConfiguration":{
     "名称":" SEARCHENGINE",
     " Type":" HTTP",
     " URL":" https://default.com",
     " Authentication":" NoAuthentication",
     " ProxyType":" Internet"
   }
 }
 

当我从提供商帐户中删除目标位置时,会从目标服务中收到404错误。

退订并重新订阅无济于事。

这是目标服务在mta中的声明:

 #DESTINATION
  -名称:saas_dest_service
    类型:目的地
    参数:
       服务计划:精简版
       共享:真实

 

我的nodejs应用程序环境变量:

"目标":[
    {
     " binding_name":null,
     "凭据":{
      " clientid":" sb-克隆********!b20897 | destination-xsappname!b404",
      " clientsecret":" ******** =",
      " identityzone":" testdpi",
      " instanceid":" a83ade9d-8c3b-4a1f-a0d8-f8e0bcf35858",
      " tenantid":" ",
      " tenantmode":"专用",
      " uaadomain":" authentication.eu10.hana.ondemand.com",
      " uri":" https://destination-configuration.cfapps.eu10.hana.ondemand.com",
      " url":" https://testdpi.authentication.eu10.hana.ondemand.com",
      " verificationkey":"-****-",
      " xsappname":"克隆*******!b20897 | destination-xsappname!b404"
     },
     " instance_name":" saas_dest_service",
     " label":"目的地",
     " name":" saas_dest_service",
     "计划":"精简版",
     "提供者":null,
     " syslog_drain_url":null,
     "标签":[
      "目的地",
      " conn",
      " connsvc"
     ],
     " volume_mounts":[]
    }
   ],
 

如您所见,目标服务的租户模式是专用的。 这是正确的吗?

我如何使这个承租人知道?

我认为我必须在目标服务呼叫的请求中将当前的tenantId添加到某个地方,但是我不知道在哪里。

kr,

Joachim

(50.9 kB)
付费偷看设置
发送
1条回答
绿领巾童鞋
1楼 · 2020-08-16 13:04.采纳回答

问题解决了!

要使服务租户知道,您需要向其他网址请求oauth令牌。
我在

上请求令牌

`$ {destination.credentials.url}/oauth/token`

这将在提供商端搜索目的地。

如果您希望在消费者端找到目的地,则需要构造另一个令牌URL。

`https://$ {req.authInfo.subdomain}。$ {destination.credentials.uaadomain}/oauth/token`

您可以使用相同的客户端ID和密码。 当您使用此令牌查询目标服务时,一切都会按预期进行。

一周热门 更多>