天天看點

如何為部署到 SAP BTP 平台上的 Node.js 應用提供Authorization 和 Trust 管理 - 權限管控

本教程的目标是通過身份驗證和授權來保護和部署産品清單應用程式,是以隻有具有正确授權的使用者才能獲得身份驗證應用程式中的産品。沒有必要授權的使用者可以登入應用程式,但看不到産品。

本教程的基礎是一個 Node.js 應用程式,它使用 express 架構和 SAPUI5 來顯示産品清單(參見螢幕截圖)。

如何為部署到 SAP BTP 平台上的 Node.js 應用提供Authorization 和 Trust 管理 - 權限管控

XSUAA and the Application Router

為了保護此産品清單應用程式,使用了兩個元件。 一種稱為 XSUAA 服務,另一種稱為應用路由器。 應用程式路由器與 XSUAA 服務結合使用來驗證使用者并将使用者路由到受保護的應用程式。

XSUAA 扮演 OAuth 授權服務的角色,而應用程式路由器扮演 OAuth 用戶端的角色。 此外,應用路由器充當應用的中央入口點。

為了防止在未經身份驗證的情況下直接調用您的應用程式,有必要向您的應用程式添加一些代碼。 在我們的示例中,您使用 Node.js 護照身份驗證中間件并使用 XSUAA JWT 政策對其進行配置。

如何為部署到 SAP BTP 平台上的 Node.js 應用提供Authorization 和 Trust 管理 - 權限管控

此代碼可防止在沒有有效 JWT 的情況下直接調用産品清單應用程式。

如何為部署到 SAP BTP 平台上的 Node.js 應用提供Authorization 和 Trust 管理 - 權限管控

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。 稍後您還需要路由來配置目的地。

如何為部署到 SAP BTP 平台上的 Node.js 應用提供Authorization 和 Trust 管理 - 權限管控

name 參數與之前在檔案 xs-app.json 中定義的相同。 url 參數是應用程式主機名和 Cloud Foundry 環境區域 (https://.cfapps..hana.ondemand.com) 的結果。 forwardAuthToken 參數設定為 true 可確定 approuter 将 JWT 令牌轉發到目的地。

如何為部署到 SAP BTP 平台上的 Node.js 應用提供Authorization 和 Trust 管理 - 權限管控

package.json 檔案的依賴:

如何為部署到 SAP BTP 平台上的 Node.js 應用提供Authorization 和 Trust 管理 - 權限管控

要使用 XSUAA 服務,需要一個名為 xs-security.json 的檔案。 該檔案可以定義 XSUAA 服務執行個體的屬性以及不同的角色和授權。 在此示例中,該檔案包含一個角色模闆和一個具有産品清單檢視者角色的角色集合,使使用者可以稍後檢視産品。

建立一個 security 檔案夾,xs-security.json 檔案内容維護如下:

如何為部署到 SAP BTP 平台上的 Node.js 應用提供Authorization 和 Trust 管理 - 權限管控
如何為部署到 SAP BTP 平台上的 Node.js 應用提供Authorization 和 Trust 管理 - 權限管控

這将建立一個具有角色模闆的角色集合和一個具有閱讀範圍的角色,是以具有此角色的使用者可以檢視産品。

Prepare the approuter files

将名為 approuter 的檔案夾添加到您的産品清單檔案夾中。

在該檔案夾中建立一個名為 package.json 的檔案。

添加以下内容:

如何為部署到 SAP BTP 平台上的 Node.js 應用提供Authorization 和 Trust 管理 - 權限管控

xs-app.json 的内容:

如何為部署到 SAP BTP 平台上的 Node.js 應用提供Authorization 和 Trust 管理 - 權限管控
如何為部署到 SAP BTP 平台上的 Node.js 應用提供Authorization 和 Trust 管理 - 權限管控

這将建立一個名為 products-destination 的目的地。 目的地稍後會在 manifest.yml 中引用。

Move static content to the application router

出于性能原因,最好将應用程式的圖像放入帶有應用程式路由器的靜态資源檔案夾中。

最後應用結構如下:

如何為部署到 SAP BTP 平台上的 Node.js 應用提供Authorization 和 Trust 管理 - 權限管控
如何為部署到 SAP BTP 平台上的 Node.js 應用提供Authorization 和 Trust 管理 - 權限管控
如何為部署到 SAP BTP 平台上的 Node.js 應用提供Authorization 和 Trust 管理 - 權限管控

Update the manifest file

在清單檔案中,您必須為應用程式定義主機名并添加目的地。 清單檔案用于将 XSUAA 服務執行個體綁定到您的應用程式。

如何為部署到 SAP BTP 平台上的 Node.js 應用提供Authorization 和 Trust 管理 - 權限管控

Update the index.html file

因為您使用 /products 通過 approuter 調用産品清單,是以您需要在 index.html 檔案中進行一些小的更改。

導航到 product-list/myapp/static 檔案夾。

将 index.html 檔案中的第 24 行替換為以下代碼。

如何為部署到 SAP BTP 平台上的 Node.js 應用提供Authorization 和 Trust 管理 - 權限管控

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/緩存)。

該應用程式現在将向您展示産品:

如何為部署到 SAP BTP 平台上的 Node.js 應用提供Authorization 和 Trust 管理 - 權限管控

繼續閱讀