如何为部署到 SAP BTP 平台上的 Node.js 应用提供Authorization 和 Trust 管理 - 权限管控
官方鏈接
本教程的目標(biāo)是通過(guò)身份驗(yàn)證和授權(quán)來(lái)保護(hù)和部署產(chǎn)品列表應(yīng)用程序,因此只有具有正確授權(quán)的用戶(hù)才能獲得身份驗(yàn)證應(yīng)用程序中的產(chǎn)品。沒(méi)有必要授權(quán)的用戶(hù)可以登錄應(yīng)用程序,但看不到產(chǎn)品。
本教程的基礎(chǔ)是一個(gè) Node.js 應(yīng)用程序,它使用 express 框架和 SAPUI5 來(lái)顯示產(chǎn)品列表(參見(jiàn)屏幕截圖)。
XSUAA and the Application Router
為了保護(hù)此產(chǎn)品列表應(yīng)用程序,使用了兩個(gè)組件。 一種稱(chēng)為 XSUAA 服務(wù),另一種稱(chēng)為應(yīng)用路由器。 應(yīng)用程序路由器與 XSUAA 服務(wù)結(jié)合使用來(lái)驗(yàn)證用戶(hù)并將用戶(hù)路由到受保護(hù)的應(yīng)用程序。
XSUAA 扮演 OAuth 授權(quán)服務(wù)的角色,而應(yīng)用程序路由器扮演 OAuth 客戶(hù)端的角色。 此外,應(yīng)用路由器充當(dāng)應(yīng)用的中央入口點(diǎn)。
為了防止在未經(jīng)身份驗(yàn)證的情況下直接調(diào)用您的應(yīng)用程序,有必要向您的應(yīng)用程序添加一些代碼。 在我們的示例中,您使用 Node.js 護(hù)照身份驗(yàn)證中間件并使用 XSUAA JWT 策略對(duì)其進(jìn)行配置。
此代碼可防止在沒(méi)有有效 JWT 的情況下直接調(diào)用產(chǎn)品列表應(yīng)用程序。
checkReadScope 函數(shù)確保只有具有正確權(quán)限的用戶(hù)才能查看產(chǎn)品。
If you want to use SAP modules locally, you need to add the npm configuration:
npm config set @sap:registry https://npm.sap.com
approuter 將使您能夠創(chuàng)建到您的應(yīng)用程序的安全路由。
在 manifest.yaml 中,您必須為應(yīng)用程序定義主機(jī)名并添加目的地。 清單文件用于將 XSUAA 服務(wù)實(shí)例綁定到您的應(yīng)用程序。
使用參數(shù) route 為您的應(yīng)用程序指定一個(gè)特定的主機(jī)名。 路由在整個(gè) Cloud Foundry 環(huán)境中必須是唯一的,因此請(qǐng)確保向路由添加隨機(jī)部分,例如您的姓名首字母和出生日期,如 product-list-ap25 和 approuter-product-list-ap25。 稍后您還需要路由來(lái)配置目的地。
name 參數(shù)與之前在文件 xs-app.json 中定義的相同。 url 參數(shù)是應(yīng)用程序主機(jī)名和 Cloud Foundry 環(huán)境區(qū)域 (https://.cfapps..hana.ondemand.com) 的結(jié)果。 forwardAuthToken 參數(shù)設(shè)置為 true 可確保 approuter 將 JWT 令牌轉(zhuǎn)發(fā)到目的地。
package.json 文件的依賴(lài):
要使用 XSUAA 服務(wù),需要一個(gè)名為 xs-security.json 的文件。 該文件可以定義 XSUAA 服務(wù)實(shí)例的屬性以及不同的角色和授權(quán)。 在此示例中,該文件包含一個(gè)角色模板和一個(gè)具有產(chǎn)品列表查看者角色的角色集合,使用戶(hù)可以稍后查看產(chǎn)品。
新建一個(gè) security 文件夾,xs-security.json 文件內(nèi)容維護(hù)如下:
{"xsappname": "product-list","tenant-mode": "dedicated","scopes": [{"name": "$XSAPPNAME.read","description": "With this scope, USER can read products."}],"role-templates": [{"name": "Viewer","description": "Role to get the list of products","scope-references": ["$XSAPPNAME.read"]}],"role-collections": [{"name": "ProductListViewer","description": "Product List Viewer","role-template-references": ["$XSAPPNAME.Viewer"]}] }這將創(chuàng)建一個(gè)具有角色模板的角色集合和一個(gè)具有閱讀范圍的角色,因此具有此角色的用戶(hù)可以查看產(chǎn)品。
Prepare the approuter files
approuter 將使您能夠創(chuàng)建到您的應(yīng)用程序的安全路由。
-
將名為 approuter 的文件夾添加到您的產(chǎn)品列表文件夾中。
-
在該文件夾中創(chuàng)建一個(gè)名為 package.json 的文件。
-
添加以下內(nèi)容:
xs-app.json 的內(nèi)容:
這將創(chuàng)建一個(gè)名為 products-destination 的目的地。 目的地稍后會(huì)在 manifest.yml 中引用。
Move static content to the application router
出于性能原因,最好將應(yīng)用程序的圖像放入帶有應(yīng)用程序路由器的靜態(tài)資源文件夾中。
最后應(yīng)用結(jié)構(gòu)如下:
Update the manifest file
在清單文件中,您必須為應(yīng)用程序定義主機(jī)名并添加目的地。 清單文件用于將 XSUAA 服務(wù)實(shí)例綁定到您的應(yīng)用程序。
applications: # Application - name: product-listinstances: 1memory: 128Mroutes:- route: product-list-jerry.cfapps.eu10.hana.ondemand.compath: myappbuildpacks:- nodejs_buildpack timeout: 180services:- xsuaa-service-tutorial# Application Router - name: approuterroutes:- route: approuter-product-list-jerry.cfapps.eu10.hana.ondemand.compath: approuterbuildpacks:- nodejs_buildpackmemory: 128Mservices:- xsuaa-service-tutorialenv:destinations: >[{"name":"products-destination","url":"https://product-list-jerry.cfapps.eu10.hana.ondemand.com","forwardAuthToken": true}]Update the index.html file
因?yàn)槟褂?/products 通過(guò) approuter 調(diào)用產(chǎn)品列表,所以您需要在 index.html 文件中進(jìn)行一些小的更改。
-
導(dǎo)航到 product-list/myapp/static 文件夾。
-
將 index.html 文件中的第 24 行替換為以下代碼。
Create the XSUAA service instance
在部署應(yīng)用程序之前,您需要為 XSUAA 創(chuàng)建服務(wù)實(shí)例。
-
使用 Cloud Foundry CLI 登錄到您的 Cloud Foundry 帳戶(hù)。
-
導(dǎo)航到產(chǎn)品列表文件夾。
-
使用 xs-security.json 安全描述符文件創(chuàng)建 XSUAA 服務(wù)實(shí)例。
cf create-service xsuaa application xsuaa-service-tutorial -c security/xs-security.json
最后 cf deploy 部署應(yīng)用。
Call your application from its secure route
您的應(yīng)用程序有兩個(gè)在 manifest.yml 中定義的路由。 應(yīng)用程序的直接路由應(yīng)該返回一條錯(cuò)誤消息,指出未經(jīng)授權(quán)(因?yàn)槟€沒(méi)有有效的 JWT)。 通過(guò) approuter 的安全路由重定向到登錄屏幕。 登錄后,應(yīng)用程序打開(kāi)但顯示消息無(wú)數(shù)據(jù)。 要查看產(chǎn)品數(shù)據(jù),您需要為您的用戶(hù)分配具有必要授權(quán)的角色集合。
首先確保無(wú)法通過(guò)其直接 URL 訪問(wèn)您的應(yīng)用程序:
https://product-list-ap25.cfapps.eu10.hana.ondemand.com
如果一切正常,這將導(dǎo)致讀取未經(jīng)授權(quán)的錯(cuò)誤消息。
使用應(yīng)用程序路由器的安全路由導(dǎo)航到您的應(yīng)用程序:
https://approuter-product-list-ap25.cfapps.eu10.hana.ondemand.com/products
輸入您的試用帳戶(hù)的電子郵件和密碼。
您應(yīng)該會(huì)看到 no data 消息。 這是因?yàn)槟形捶峙洳榭串a(chǎn)品的角色。 您將在下一步中執(zhí)行此操作。
Assign the role collection
為您的用戶(hù)分配包含查看產(chǎn)品列表中產(chǎn)品所需角色的角色集合。
-
打開(kāi) SAP BTP 主控室。導(dǎo)航到您的子帳戶(hù)。
-
選擇安全選項(xiàng)卡,然后選擇信任配置。選擇默認(rèn)身份提供者。
-
輸入您的電子郵件地址并選擇顯示作業(yè)。
-
選擇分配角色集合。選擇 ProductListViewer 角色集合。
再次調(diào)用 approuter 的 URL(您之前可能必須刪除您的 cookie/緩存)。
https://approuter-product-list-ap25.cfapps.eu10.hana.ondemand.com/products
該應(yīng)用程序現(xiàn)在將向您展示產(chǎn)品:
更多Jerry的原創(chuàng)文章,盡在:“汪子熙”:
總結(jié)
以上是生活随笔為你收集整理的如何为部署到 SAP BTP 平台上的 Node.js 应用提供Authorization 和 Trust 管理 - 权限管控的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何在 SAP BTP 平台 ABAP
- 下一篇: 使用 cf push 部署应用到 SAP