如何为部署到 SAP BTP 平台上的 Node.js 应用提供Authorization 和 Trust 管理 - 权限管控
官方鏈接
本教程的目標是通過身份驗證和授權來保護和部署產品列表應用程序,因此只有具有正確授權的用戶才能獲得身份驗證應用程序中的產品。沒有必要授權的用戶可以登錄應用程序,但看不到產品。
本教程的基礎是一個 Node.js 應用程序,它使用 express 框架和 SAPUI5 來顯示產品列表(參見屏幕截圖)。
XSUAA and the Application Router
為了保護此產品列表應用程序,使用了兩個組件。 一種稱為 XSUAA 服務,另一種稱為應用路由器。 應用程序路由器與 XSUAA 服務結合使用來驗證用戶并將用戶路由到受保護的應用程序。
XSUAA 扮演 OAuth 授權服務的角色,而應用程序路由器扮演 OAuth 客戶端的角色。 此外,應用路由器充當應用的中央入口點。
為了防止在未經身份驗證的情況下直接調用您的應用程序,有必要向您的應用程序添加一些代碼。 在我們的示例中,您使用 Node.js 護照身份驗證中間件并使用 XSUAA JWT 策略對其進行配置。
此代碼可防止在沒有有效 JWT 的情況下直接調用產品列表應用程序。
checkReadScope 函數確保只有具有正確權限的用戶才能查看產品。
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 將使您能夠創建到您的應用程序的安全路由。
在 manifest.yaml 中,您必須為應用程序定義主機名并添加目的地。 清單文件用于將 XSUAA 服務實例綁定到您的應用程序。
使用參數 route 為您的應用程序指定一個特定的主機名。 路由在整個 Cloud Foundry 環境中必須是唯一的,因此請確保向路由添加隨機部分,例如您的姓名首字母和出生日期,如 product-list-ap25 和 approuter-product-list-ap25。 稍后您還需要路由來配置目的地。
name 參數與之前在文件 xs-app.json 中定義的相同。 url 參數是應用程序主機名和 Cloud Foundry 環境區域 (https://.cfapps..hana.ondemand.com) 的結果。 forwardAuthToken 參數設置為 true 可確保 approuter 將 JWT 令牌轉發到目的地。
package.json 文件的依賴:
要使用 XSUAA 服務,需要一個名為 xs-security.json 的文件。 該文件可以定義 XSUAA 服務實例的屬性以及不同的角色和授權。 在此示例中,該文件包含一個角色模板和一個具有產品列表查看者角色的角色集合,使用戶可以稍后查看產品。
新建一個 security 文件夾,xs-security.json 文件內容維護如下:
{"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"]}] }這將創建一個具有角色模板的角色集合和一個具有閱讀范圍的角色,因此具有此角色的用戶可以查看產品。
Prepare the approuter files
approuter 將使您能夠創建到您的應用程序的安全路由。
-
將名為 approuter 的文件夾添加到您的產品列表文件夾中。
-
在該文件夾中創建一個名為 package.json 的文件。
-
添加以下內容:
xs-app.json 的內容:
這將創建一個名為 products-destination 的目的地。 目的地稍后會在 manifest.yml 中引用。
Move static content to the application router
出于性能原因,最好將應用程序的圖像放入帶有應用程序路由器的靜態資源文件夾中。
最后應用結構如下:
Update the manifest file
在清單文件中,您必須為應用程序定義主機名并添加目的地。 清單文件用于將 XSUAA 服務實例綁定到您的應用程序。
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
因為您使用 /products 通過 approuter 調用產品列表,所以您需要在 index.html 文件中進行一些小的更改。
-
導航到 product-list/myapp/static 文件夾。
-
將 index.html 文件中的第 24 行替換為以下代碼。
Create the XSUAA service instance
在部署應用程序之前,您需要為 XSUAA 創建服務實例。
-
使用 Cloud Foundry CLI 登錄到您的 Cloud Foundry 帳戶。
-
導航到產品列表文件夾。
-
使用 xs-security.json 安全描述符文件創建 XSUAA 服務實例。
cf create-service xsuaa application xsuaa-service-tutorial -c security/xs-security.json
最后 cf deploy 部署應用。
Call your application from its secure route
您的應用程序有兩個在 manifest.yml 中定義的路由。 應用程序的直接路由應該返回一條錯誤消息,指出未經授權(因為您還沒有有效的 JWT)。 通過 approuter 的安全路由重定向到登錄屏幕。 登錄后,應用程序打開但顯示消息無數據。 要查看產品數據,您需要為您的用戶分配具有必要授權的角色集合。
首先確保無法通過其直接 URL 訪問您的應用程序:
https://product-list-ap25.cfapps.eu10.hana.ondemand.com
如果一切正常,這將導致讀取未經授權的錯誤消息。
使用應用程序路由器的安全路由導航到您的應用程序:
https://approuter-product-list-ap25.cfapps.eu10.hana.ondemand.com/products
輸入您的試用帳戶的電子郵件和密碼。
您應該會看到 no data 消息。 這是因為您尚未分配查看產品的角色。 您將在下一步中執行此操作。
Assign the role collection
為您的用戶分配包含查看產品列表中產品所需角色的角色集合。
-
打開 SAP BTP 主控室。導航到您的子帳戶。
-
選擇安全選項卡,然后選擇信任配置。選擇默認身份提供者。
-
輸入您的電子郵件地址并選擇顯示作業。
-
選擇分配角色集合。選擇 ProductListViewer 角色集合。
再次調用 approuter 的 URL(您之前可能必須刪除您的 cookie/緩存)。
https://approuter-product-list-ap25.cfapps.eu10.hana.ondemand.com/products
該應用程序現在將向您展示產品:
更多Jerry的原創文章,盡在:“汪子熙”:
總結
以上是生活随笔為你收集整理的如何为部署到 SAP BTP 平台上的 Node.js 应用提供Authorization 和 Trust 管理 - 权限管控的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在 SAP BTP 平台 ABAP
- 下一篇: 使用 cf push 部署应用到 SAP