官方链接本教程的目的是通过身份验证和授权来保护和部署产品列表应用程序,所以只有那些拥有正确授权用户在认证申请中获取产品。没有必要授权的用户可以登录应用程序,但看不到产品。本教程的基础是一个Node.js应用程序,它使用express框架和SAPUI5来显示产品列表(见屏幕截图)。XSUAA和应用程序路由器为了保护这个产品列表应用程序,使用了两个组件。一个称为XSUAA服务,另一个称为应用程序路由器。ApplicationRouter与XSUAA服务一起工作以验证用户并将用户路由到受保护的应用程序。XSUAA扮演OAuth授权服务角色,ApplicationRouter扮演OAuth客户端角色。此外,ApplicationRouter充当应用程序的中央入口点。为了防止您的应用程序未经身份验证而被直接调用,有必要在您的应用程序中添加一些代码。在我们的示例中,您使用Node.js护照身份验证中间件并使用XSUAAJWT策略对其进行配置。此代码可防止在没有有效JWT的情况下直接调用产品列表应用程序。checkReadScope函数确保只有具有正确权限的用户才能查看产品。如果您想在本地使用SAP模块,则需要添加npm配置:npmconfigset@sap:registryhttps://npm.sap.comapprouter将使您能够创建到应用程序的安全路由。在manifest.yaml中,您必须为应用程序定义主机名并添加目的地。清单文件用于将XSUAA服务实例绑定到您的应用程序。使用参数route为您的应用程序指定特定的主机名。路由在整个CloudFoundry环境中必须是唯一的,因此请确保向您的路由添加随机部分,例如您的姓名首字母和出生日期,例如product-list-ap25和approuter-product-list-ap25。稍后您还需要路由来配置目的地。名称参数与之前在文件xs-app.json中定义的相同。url参数是应用程序主机名和CloudFoundry环境区域(https://.cfapps..hana.ondemand.com)的结果。将forwardAuthToken参数设置为true可确保批准者将JWT令牌转发到目的地。package.json文件的依赖:要使用XSUAA服务,需要一个名为xs-security.json的文件。该文件可以定义XSUAA服务实例的属性以及不同的角色和权限。在此示例中,该文件包含一个角色模板和一个具有产品列表查看者角色的角色集合,允许用户稍后查看产品。新建security文件夹,维护xs-security.json文件内容如下:{"xsappname":"product-list","tenant-mode":"dedicated","scopes":[{"name":"$XSAPPNAME.read","description":"有了这个范围,用户可以阅读产品。"}],"role-templates":[{"name":"Viewer","description":"Roletogetthelistofproducts","scope-references":["$XSAPPNAME.read"]}],"role-collections":[{"name":"ProductListViewer","description":"ProductListViewer","role-template-references":["$XSAPPNAME.Viewer"]}]}这将创建一个角色具有角色模板和具有阅读范围的角色的集合,因此具有此角色的用户可以查看产品。准备approuter文件approuter将使您能够创建到您的应用程序的安全路径。将名为approuter的文件夹添加到您的产品列表文件夹中。在该文件夹中创建一个名为package.json的文件。添加以下内容:{"name":"approuter","dependencies":{"@sap/approuter":"^9.0.2"},"scripts":{"start":"nodenode_modules/@sap/approuter/approuter.js"}}xs-app.json的内容:{"routes":[{"source":"^/products","target":"/","destination":"products-destination"}]}这将创建一个名为products-destination的目的地。稍后在manifest.yml中引用目的地。将静态内容移至应用程序路由器出于性能原因,最好将应用程序的图像与应用程序路由器一起放在静态资源文件夹中。最后,应用程序结构如下:更新清单文件在清单文件中,您必须为应用程序定义主机名并添加目的地。清单文件用于将XSUAA服务实例绑定到您的应用程序。应用程序:#应用程序名称:产品列表实例:1内存:128M路由:-路由:product-list-jerry.cfapps.eu10.hana.ondemand.com路径:myappbuildpacks:-nodejs_buildpack超时:180服务:-xsuaa-service-tutorial#ApplicationRouter-name:approuterroutes:-route:approuter-product-list-jerry.cfapps.eu10.hana.ondemand.compath:approuterbuildpacks:-nodejs_buildpack内存:128M服务:-xsuaa-service-教程环境:目的地:>[{"name":"products-destination","url":"https://product-list-jerry.cfapps.eu10.hana.ondemand.com","forwardAuthToken":true}]更新index.html文件由于您正在使用/products通过approuter调用产品列表,因此您需要对index.html文件进行一些小改动。导航到product-list/myapp/static文件夹。将index.html文件中的第24行替换为以下代码。创建XSUAA服务实例在部署您的应用程序之前,您需要为XSUAA创建一个服务实例。使用CloudFoundryCLI登录您的CloudFoundry帐户。导航到产品列表文件夹。使用xs-security.json安全描述符文件创建XSUAA服务实例。cfcreate-servicexsuaaapplicationxsuaa-service-tutorial-csecurity/xs-security.json最后,cfdeploy部署应用程序。从安全路由调用您的应用程序您的应用程序在manifest.yml中定义了两个路由。应用程序的直接路由应返回一条错误消息,指出未授权(因为您还没有有效的JWT)。通过approuter的安全路由重定向到登录屏幕。登录后,应用程序打开但显示消息无数据。要查看产品数据,您需要为您的用户分配一组具有必要权限的角色。首先确保您的应用程序无法通过其直接URL访问:https://product-list-ap25.cfa...如果一切正常,这将导致读取未经授权的错误消息。使用AppRouter的安全路径导航到您的应用程序:https://approuter-product-lis...输入您的试用帐户电子邮件和密码。您应该会看到一条无数据消息。这是因为您尚未分配查看产品角色。您将在下一步中执行此操作。分配角色集合为您的用户分配角色集合,其中包含查看产品列表中的产品所需的角色。打开SAPBTP驾驶舱。导航到您的子帐户。选择安全选项卡,然后选择信任配置。选择默认身份提供者。输入您的电子邮件地址并选择显示职位。选择分配角色集合。选择ProductListViewer角色集合。再次调用approuter的URL(您之前可能必须删除您的cookies/缓存)。https://approuter-product-lis...应用程序现在将向您展示产品:Jerry的更多原创文章:“王子熙”: