XSA中的服务间通信

2020-09-17 03:23发布

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

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


我们正在XSA上构建包含多个微服务的应用程序。

现在,我正在努力为服务间通信正确设置安全令牌,即服务A需要调用服务B并为此传递一个oauth令牌。

在我们的设置中,每个服务都绑定到自己的xsuaa实例,以便能够管理与该服务直接相关的作用域。 在开发过程中,每个开发人员都在单独的空间中运行。

到目前为止,我看到了三个通过身份验证的常规选项。 不幸的是,我无法运行任何选项。

1)使用外部作用域,如应用程序安全描述符配置语法
这里的约束似乎在一个空间中运行。 当我将" ServiceB!i8.read"硬编码到scopes_references中时,令牌将包含它。 不幸的是,使用$ XSAPPNAME(application,ServiceB).read无法正常工作,我希望将其解析为相同的绝对名称。
高度赞赏如何使用外部作用域的示例!

2)使用令牌交换。

服务B可以将从服务A接收到的令牌交换为特定于服务的令牌。 我试图收到 JWT承载令牌授予,但我收到的只是来自xsuaa的500服务器错误。 也许它不在SPS03中实现?

3)使用客户端凭据

此选项是最不优选的,因为这意味着要在服务B中使用用户上下文。无论如何,我不希望收到设置了任何引用权限的令牌。
对于选项1,一个完整的示例将非常感激。

如果我错过了其他选择,请随时让我知道。

此问题我目前阻止发布几乎完成的应用程序,所以我希望这里有人可以帮助我解决这个问题。


谢谢,

Philipp

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

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


我们正在XSA上构建包含多个微服务的应用程序。

现在,我正在努力为服务间通信正确设置安全令牌,即服务A需要调用服务B并为此传递一个oauth令牌。

在我们的设置中,每个服务都绑定到自己的xsuaa实例,以便能够管理与该服务直接相关的作用域。 在开发过程中,每个开发人员都在单独的空间中运行。

到目前为止,我看到了三个通过身份验证的常规选项。 不幸的是,我无法运行任何选项。

1)使用外部作用域,如应用程序安全描述符配置语法
这里的约束似乎在一个空间中运行。 当我将" ServiceB!i8.read"硬编码到scopes_references中时,令牌将包含它。 不幸的是,使用$ XSAPPNAME(application,ServiceB).read无法正常工作,我希望将其解析为相同的绝对名称。
高度赞赏如何使用外部作用域的示例!

2)使用令牌交换。

服务B可以将从服务A接收到的令牌交换为特定于服务的令牌。 我试图收到 JWT承载令牌授予,但我收到的只是来自xsuaa的500服务器错误。 也许它不在SPS03中实现?

3)使用客户端凭据

此选项是最不优选的,因为这意味着要在服务B中使用用户上下文。无论如何,我不希望收到设置了任何引用权限的令牌。
对于选项1,一个完整的示例将非常感激。

如果我错过了其他选择,请随时让我知道。

此问题我目前阻止发布几乎完成的应用程序,所以我希望这里有人可以帮助我解决这个问题。


谢谢,

Philipp

付费偷看设置
发送
3条回答
My梦
1楼-- · 2020-09-17 04:11

我要为选项1添加当前设置:

提供范围的服务:

 {
     " xsappname":" ServiceB",
     "范围":[
         {
             " name":" $ XSAPPNAME.readRemote",
             " description":"查看来自其他服务的数据",
             " granted-apps":[" $ XSAPPNAME(应用程序,ServiceA)"]
         },
         {
             " name":" $ XSAPPNAME.read",
             " description":"查看数据"
         }
     ],
     "角色模板":[
         {
             " name":" ServiceB_User_Role",
             " description":"标准用户角色",
             "范围参考":[
                 " $ XSAPPNAME.read",
                 " $ XSAPPNAME.readRemote"
             ]
         }
     ]
 } 

引用范围的服务

 {
     " xsappname":" ServiceA",
     "范围":[
         {
             " name":" $ XSAPPNAME.read",
             " description":"查看应用程序"
         }
     ],
     "外国范围参考":[
         " $ XSAPPNAME(application,ServiceB).readRemote"
     ],
     "角色模板":[
         {
             " name":" ServiceA_User_role",
             " description":"标准用户角色",
             "范围参考":[
                 " $ XSAPPNAME.read",
                 " $ XSAPPNAME(application,ServiceB).readRemote"
             ]
         }
     ]
 } 

也许有人可以指出这里出了什么问题?

95年老男孩
2楼-- · 2020-09-17 04:12

嗨,菲利普,

感谢您的提问。 我也非常希望看到您的解决方案,并希望有人能帮助您!

是否有可能您在描述符中错过了这个:
 " authorities":["。ForeignCall"," .ForeignCall",] 

BR,德克

梦想连接
3楼-- · 2020-09-17 03:47

您是对的。 对于选项3,这是必需的,因此在本示例中,我将其省略。

一周热门 更多>