服务到服务呼吁SaaS应用

2020-08-23 02:15发布

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

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


嘿,
我正在创建一个基于SAP Cloud SDK的应用程序,该应用程序可以通过SaaS Provisioning服务进行订阅。 验证通过使用xsuaa-service的approuter以通常的方式进行。

现在,我需要对某些应用程序端点的API访问权限。 我可以利用xsuaa服务的客户端ID和密码来获取JWT令牌并访问这些端点。 但是:该JWT令牌仅限于提供者帐户-从而仅限于单个租户!

我尝试了几件事-尤其是为XSUAA创建服务密钥-但它们总是获得相同的凭据和身份区域。

是否可以通过XSUAA创建范围在身份区域内的其他OAuth客户端?

其他信息:该问题适用于SAP Cloud SDK的Java和JS/TS风格...

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

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


嘿,
我正在创建一个基于SAP Cloud SDK的应用程序,该应用程序可以通过SaaS Provisioning服务进行订阅。 验证通过使用xsuaa-service的approuter以通常的方式进行。

现在,我需要对某些应用程序端点的API访问权限。 我可以利用xsuaa服务的客户端ID和密码来获取JWT令牌并访问这些端点。 但是:该JWT令牌仅限于提供者帐户-从而仅限于单个租户!

我尝试了几件事-尤其是为XSUAA创建服务密钥-但它们总是获得相同的凭据和身份区域。

是否可以通过XSUAA创建范围在身份区域内的其他OAuth客户端?

其他信息:该问题适用于SAP Cloud SDK的Java和JS/TS风格...

付费偷看设置
发送
3条回答
wang628962
1楼-- · 2020-08-23 02:55

您好Tobias,

如果我正确理解了您的问题,则您在一个子帐户中拥有一个应用程序(我们称该子账户为"提供者"),而您从另一个子账户中订阅了该应用程序(我们将此账户称为"一个订户")。

我了解您现在要实现的是代表请求的租户(例如订户租户)从您的应用程序调用服务。

这里以目标服务为例(在SAP Cloud SDK中已经为您解决了所有这些问题)。 如果查看绑定到目标服务的服务(在应用程序的环境变量的VCAP_SERVICES中,可从命令行通过" cf env "进行访问),您将在此处找到三个相关条目:

"目的地":[
  {
   " binding_name":null,
   "凭据":{
     " clientid":" somethingId",
     " clientsecret":" somethingSecret",
     ...
     " url":" https://provider.authentication.sap.hana.ondemand.com",
     ...
    },
   ...
  }
 ] 

为了获得目标服务的访问令牌,您需要使用clientid和clientsecret作为凭据,针对给定URL的"/img/oauth/token"端点执行客户端凭据授予*。 请注意,URL包含" provider"作为子域,这恰好是您的应用程序所在的子帐户的名称。这不是巧合,而是XSUAA服务(我们从中获取令牌的服务)用来确定的机制 向其租户请求令牌。 这意味着,如果请求应代表"订户"租户完成,则只需将URL中的"提供者"替换为请求租户的名称,在本例中为"订户"。 在运行时,您将从触发应用程序中所有这些请求的传入请求的用户令牌(JWT)中获取此信息。

在适用于JavaScript的SAP Cloud SDK中,您可以使用serviceToken 函数。

我希望这能回答您的问题! 如果没有,请随时提供更多详细信息!

最诚挚的问候,
丹尼斯


*还有其他赠款,您需要的赠款取决于用例和服务

粗暴的香蕉
2楼-- · 2020-08-23 02:48

我们正在开发一个多租户应用程序,可以由多个客户/租户订阅。 因此,在我们的案例中,确定的方式就是订阅。

关于API客户端:在第1步中,客户端将有一个本地安装的应用程序,将请求发送到我们的多租户应用程序-服务绑定在这里不起作用。

也许在下一步中,CloudFoundry中可能还存在另一个服务,该服务调用我们应用程序的API端点,然后可以利用服务绑定-尽管我不太确定,是否可以更轻松地使用 我们(希望将有)针对本地API客户端进行的那种身份验证...

基本上,我认为XSUAA能够为多个客户端提供服务-仅仅是因为据我所知,这就是授权服务器的工作。 但是我开始担心XSUAA不打算用于这种情况-更侧重于业务用户身份验证...

悠然的二货
3楼-- · 2020-08-23 02:54

嗨,Java SDK的几点要点:

  1. 首先,您是否按照此处所述实现了订阅回调? https://help.sap.com/ viewer/65de2977205c403bbc107264b8eccf4b/Cloud/zh-CN/ff540477f5404e3da2a8ce23dcee602a.html
  2. 我认为要获取订户帐户的JWT令牌,您必须将令牌请求发送到订户的XSUAA URL。
  3. 在使用诸如DestinationAccessor之类的Cloud SDK功能时,我们将处理URL重写以获得所需的JWT令牌。
  4. 但是,这一切都取决于使订户的XSUAA知道提供者(授权提供者的凭据)。 如果您的应用实现了订阅回调端点,则此过程将在订阅过程中自动完成。
  5. 这个堆栈溢出问题和我的回答可能也有帮助: https://stackoverflow.com/questions/55743420/failed-to-get-destinations-subscriber-sub-account-sap- cloud-platform-cf/55869520#55869520
  6. 此外,如果您想代表其他租户运行某项操作,则可能会有所帮助: https://stackoverflow.com/questions/57266333/how-to-get-subscribers-destination-in-scp-multitanant-app/57559616#57559616

一周热门 更多>