後端應用程式
您可以使用 IBM Cloud® App ID SDK 及 API,來保護後端應用程式端點和 API。
瞭解流程
開發後端應用程式的一部分是驗證您的 API 受到保護,不會遭到未獲授權的存取。 App ID SDK 可協助您保護 API 端點並確保應用程式的安全。
何謂流程的技術基準?
App ID 實現了 OAuth 2.0 和 OIDC 規格,該規格使用承載令牌進行驗證和授權。 這些令牌的格式為 JSON Web 令牌,經過數位簽章,並包含描述驗證對象和身分提供者的聲稱。 應用程式的 API 受存取及身分記號保護。 需要存取 API 的用戶端可以透過 App ID 向身分提供者進行鑑別,以交換這些記號。 代幣中的聲稱必須經過驗證,才能授予受保護 API 的存取權。
如需如何在 App ID 中使用記號的相關資訊,請參閱瞭解記號。
流程具有怎樣的外觀?
-
用戶端向 App ID 授權伺服器提出 POST 要求,以取得存取記號。 POST 要求通常會採用下列格式:
POST /oauth/v4/<tenantID>/token HTTP/1.1 Content_type: application/x-www-form-urlencoded Authorization header = "Basic" + base64encode(<clientID>:<secret>) FormData = <grantType> -
如果用戶端符合資格,則授權伺服器會傳回存取記號。
-
用戶端會將要求傳送至受保護的資源。 可以使用多種方式來傳送要求,這會隨著所使用的 HTTP 用戶端檔案庫而不同,但要求通常會採用下列格式:
curl -H 'Authorization: Bearer <accessToken>' <https://my-protected-resource.com> -
受保護的資源或 API 會驗證記號。 如果記號有效,則會將資源的存取權授與用戶端。 如果無法驗證記號,則會拒絕存取。
如需如何配置應用程式以使用 Liberty for Java的相關資訊,請參閱 快速入門: Liberty for Java 後端應用程式指導教學。
使用 Node.js SDK 保護資源
您可以使用 App ID SDK,對伺服器端應用程式施行鑑別及授權。 ApiStrategy 透過在要求過程中要求驗證存取及身分記號,致力於保護後端資源的安全。 App ID Node.js SDK 可與 Passport 框架搭配使用。
請觀看下列視訊,瞭解如何使用 App ID 保護後端 Node 應用程式。 然後,請使用一個 簡單的 Node 範例應用程式來親自試試。
開始之前
在開始使用 Node.js SDK 之前,您必須具備下列先決條件。
- App ID 的實例。
- NPM 第 4 版或更新版本
- Node 第 6 版或更新版本
安裝 Node.js SDK
-
將 App ID Node.js SDK 新增至應用程式的
package.json檔案。"dependencies": { "ibmcloud-appid": "^7.0.0" } -
執行下列指令。
npm install
起始設定 Node.js SDK
-
取得您的
oauth server url。- 導覽至 App ID 儀表板的服務認證標籤。
- 如果您還沒有一組認證,請按一下新建認證,然後按一下新增來建立一組新的認證。 如果已有一組認證,請跳過此步驟。
- 按一下檢視認證切換開關,以查看您的資訊。
- 複製
oauth server url,以在下一步中使用。
-
起始設定 App ID 通行證策略,如下列範例所示。
var express = require('express'); var passport = require('passport'); var APIStrategy = require('ibmcloud-appid').APIStrategy; passport.use(new APIStrategy({ oauthServerUrl: "<oauthServerUrl>" })); var app = express(); app.use(passport.initialize());
使用 API 策略保護 API
下列 Snippet 示範如何在 Express 應用程式中使用 ApiStrategy 來保護 /protected GET API。
如果您的 Node.js 應用程式在 IBM Cloud 上執行,且連結至您的 App ID 實例,則不需要提供 API 策略配置。 App ID 配置會使用 VCAP_SERVICES 環境變數來取得資訊。
app.get('/protected_resource', passport.authenticate('APIStrategy.STRATEGY_NAME', { session: false }), function(request, response){
console.log("Security context", request.appIdAuthorizationContext);
response.send(200, "Success!");
}
);
當記號有效時,會呼叫要求鏈中的下一個中介軟體,並將 appIdAuthorizationContext 內容新增至要求物件。 此內容包含原始存取及身分記號,以及記號的解碼有效負載資訊。
使用 Swift SDK 保護資源
App ID 伺服器端 Swift SDK 提供 API 保護中介軟體外掛程式,用來保護您的後端應用程式。 藉由建立 API 與中介軟體的關聯,您可以保護應用程式免於未獲授權的存取。 在 API 受到保護之後,中介軟體可確保驗證由 App ID 產生的記號。 然後,您可以根據驗證結果來修改 API 的行為。
import Foundation
import Kitura // server
import Credentials // middleware
import IBMCloudAppID // SDK
// setup routes
let router = Router()
// mandatory option to be passed in if app not deployed on IBM Cloud
let options = [
"oauthServerUrl": "https://us-south.appid.cloud.ibm.com/oauth/v4/d8438de6-c325-4956-ad34-abd49194affd",
]
let apiCreds = Credentials()
// Minimum macOS version required
if #available(OSX 10.12, *) {
// setup API protection
let apiKituraCredentialsPlugin = APIKituraCredentialsPlugin(options: options)
apiCreds.register(plugin: apiKituraCredentialsPlugin)
// associate route with API protection
router.all(middleware: apiCreds)
// create protected API
router.get("/protectedendpoint") { request, response, next in
response.headers["Content-Type"] = "text/html; charset=utf-8"
do {
if let userProfile = request.userProfile {
try response.status(.OK).send(
"<!DOCTYPE html><html><body>" +
"Welcome " + userProfile.displayName +
"! You are logged in with " + userProfile.provider + "." +
"</body></html>\n\n").end()
next()
return
}
try response.status(.unauthorized).send(
"<!DOCTYPE html><html><body>” + “You are not authorized!" +
"</body></html>\n\n").end()
}
catch {}
next()
}
// Start server
Kitura.addHTTPServer(onPort: 8090, with: router)
Kitura.run()
}
手動保護資源
若要保護後端應用程式及受保護資源的安全,您需要驗證記號。 當用戶端向您的資源傳送請求時,您可以驗證標記是否符合定義的規格。 記號可能包括識別資訊、範圍或您已擁有的任何其他配置。 您可以採用數種方式來驗證 App ID 存取及身分記號。 如需協助,請參閱驗證記號。
下一步
在您的應用程式中安裝 App ID 之後,您幾乎已備妥可以開始鑑別使用者了! 接下來,請嘗試執行下列其中一個動作:
- 配置您的身分提供者
- 自訂並配置登入小組件
- 進一步瞭解 Node.js SDK
- 進一步瞭解 Swift SDK