你听说过白名单和疯狂的"SAP\u JWT\u TRUST\u ACL"吗?然后你读了一些博客文章,发现这个变量已经被弃用了,现在你感到困惑了?我也有同样的感觉,我想了解xsuaajsonwebtoken在没有SAP approver的情况下是如何工作的。你也想明白吗?继续读下去!
由于几个月前"SAP\u JWT\u TRUST\u ACL过时了"(看看Carlos Roggan精彩的帖子),有了一种新的方式来继续"白名单"其他XSUAA实例。因为使用sap approver和xs很容易做到这一点-安全.json如果没有这些文件,有些事情需要理解节点.js应用程序,大数据趋势,谁将提供一个API,受到某种xsuaa的保护。
并且能够从作业调度服务和具有oAuth clientID和clientSecret的普通"用户"中获得呼叫。
注意:请谨慎阅读,免费企业管理软件,因为我不是xsuaa领域的高级专家
如果您完全不了解xsuaa,停止阅读,看看这个伟大的职位在这里!
正如您在Carlos post中发现的,关于app2app的东西有两个XSUAA实例,您将接触到有两个XSUAA实例和没有xs的单个应用程序-安全.json
这篇技术博客文章将为您提供一些关于XSUAA、JWT和oAuth令牌的详细信息,以及一个简短的示例节点.js在SAP云上使用
的方法平台云铸造空间我们有一个作业调度服务(集成了xsuaa服务)和一个额外的xsuaa服务正在运行。两者都与一个节点.js名为"JOB001"的应用程序:
由于作业调度程序服务提供自己的xsuaa服务,因此我们有两个不同的xsuaa服务。我们在Carlos Roggan的博客文章中了解到一些关于JWT中受众的信息,我们需要添加/共享这些受众。
现在我们不能共享受众,因为我们没有像参考文章中那样的两个应用程序。我们有一个应用程序(JOB001)和两个XSUAA实例。
一个是"普通"XSUAA,另一个是作业调度服务。双方都想访问JOB001应用程序和内部提供的api。
我们正在设置一个简单的节点.js带有"express"模块的应用程序。我们还使用'@sap/xsenv'模块获取环境变量(所谓的'VCAP\u SERVICES'——这里有详细信息)。
然后我们将读取'VCAP\u SERVICES',并获取xsuaa服务凭据。有了这个,我们就可以创建一个新的jwt策略。此json web令牌策略与模块"passport"一起使用,并参与中间件"使用"我们的"应用程序"。
现在我们准备好了!部署到您的云铸造环境并调用https://your-url.ondemand.com/jwtdecode在邮递员中
状态:401–未授权
很好,您的端点受到保护。好事情。
现在我们将使用凭据在之前请求oAuth V2令牌,并将此令牌发送到应用程序,我们以前确实部署过。
我们正在通过XSUAA实例"XSUAA\u jobs"的驾驶舱打开凭据:
并将在"url"提供的具有"clientid"和"clientsecret"的端点处请求oAuth令牌:
https://de.authentication.eu10.hana.ondemand.com/oauth/token?grant\u type=client\u credentials&response\u type=token
然后我们将oAuth令牌(承载器)添加到头中,作为我们所知道的"Authorization",并且我们从"/jwtdecode"令牌接收到如下内容:
所以我们现在有一个受保护的API,我们看到我们的json web令牌被解码。观众中出现了什么?"xsuaa\u jobs"的客户ID。很好!
还有什么不起作用?来自"jobscheduler"服务的令牌!
状态:401–未授权。
为什么?JOB001不存在jobscheduler服务的访问群体。
因此,我们已经将两个服务实例绑定到了JOB001应用程序,现在我们将在我们的应用程序中包含两个jwt策略:
那么这是怎么回事?
您可以提供策略的另一个默认名称。如果不提供,则默认为"JWT"。
重要的是每个策略有不同的名称:
"jwt2"包含jobscheduler服务的uaa凭据,定义为JWTStrategy(jwtStrategy2)。
重要的部分:使用passport将两个JWTStrategy添加到中间件:
在此中间件步骤中,我们确实提供了两个JWT策略,好评返现,因此也提供了JOB001应用程序的两个访问群体。
现在是时候检查另一个xsuaa服务(来自jobscheduler服务的uaa服务,不要问为什么它只被称为"uaa")是否如预期的那样工作了。
所以我们得到了"clientid"和"clientsecret"…
…请求我们的oAuth v2令牌(承载),免费网站自助建站,将该令牌添加到"Authorization"头字段,并使用"/jwtdecode"点击"send"到端点:
它正在工作!不要相信你自己——用"xusaa\u jobs"服务实例凭据再次做同样的事情……如果这仍然有效,我们做得很好
回到Carlos Roggan的博客文章。他解释了如何通过xs向每个应用程序添加访问群体-安全.json. 这是最常见的方法,但现在我们也可以做到这一点,不需要,通过要求应用程序从2个xsuaa服务获取2个json web令牌策略。
这样,作业调度程序服务就可以调用端点,企业服务软件,就像我们可以用xsuaa凭据做这件事一样。