簡體   English   中英

使用 WSO2 作為移動應用的 API 網關時,如何安全地處理消費者密鑰和秘密

[英]When using WSO2 as API gateway for mobile app, how to handle comsumer-key and secret securely

我們正在構建一個移動應用程序及其 API 服務器,其架構如下圖所示。

在此處輸入圖片說明

我們有 WSO2 作為 Spring Boot API Server 前面的 API 網關。 我們使用 WSO2 API Manager 來限制誰可以調用 API。 只有在我們的 WSO2 注冊並擁有正確的消費者密鑰和秘密的客戶端才能通過 WSO2 調用 API,通過這種方式,客戶端首先調用 WSO2 的令牌端點,將消費者密鑰和秘密與訪問令牌交換,然后調用所需的 API使用標頭Authorization: Bearer <access token>的訪問令牌Authorization: Bearer <access token>

我們有一個問題,我們不知道如何為消費者保密,因為安全審計禁止我們將機密存儲在移動應用安裝程序包中。

已經提出了一些問題,例如

WSO2 API Manager - 移動應用程序如何連接到 API Manager?

公共原生移動應用程序中的 WSO2 Api Manager OAuth2 DCR 安全性

但沒有正確的答案指向問題。 他們中的大多數被 oauth2 流程的復雜性誤導了。

為了使問題具體和清楚,請假設我們的手機沒有用戶登錄。 此問題的目標是僅允許受信任的移動應用程序通過 WSO2 調用 API。

請幫助建議這是否可能。 或者我們別無選擇,只能允許任何人調用 API。 或者 WSO2 的消費者訂閱功能根本就不是為了直接從移動應用程序使用而設計的?

在做了一些研究之后,我發現了人們通常會做的兩種選擇。

  1. 將 API 分成 2 組。 第一組包含無需用戶登錄即可使用的API,例如用於獲取初始化數據或獲取應用程序登陸頁面數據的API。 Thease APIs 設置為 public,允許任何人在沒有 clientId 和 secret 的情況下調用。 seconds 組包含需要令牌的安全 API。 移動應用程序可以使用 Oauth2 PKCE 流程來交換帶有用戶身份證明的令牌。

  2. 混淆 clientId 和 secret,並將它們保存在移動應用安裝程序包中。 API 仍然像以前一樣分為 2 組。 但第一組需要客戶端級令牌(oauth2 客戶端憑據類型),第二組需要用戶級令牌(資源所有者密碼或授權碼類型)

我更喜歡選項2。在我看來,我認為第一個選項沒有意義。 選擇這個選項的人,也許只是為了繞過安全審計檢查表, to not store the secret in public client ,而不必真正擔心安全問題。 這就像當您不能相信您的孩子安全地保管您家的鑰匙時,您決定從門上取下鎖。

保護每個 API 並將密鑰保存在客戶端。 即使某些黑客可以設法找到秘密,但他只能破解第一組的 API,您可以跟蹤他使用的 clientId。 您知道客戶端的預期行為,因此很容易設置警報以檢測來自客戶端的惡意活動並撤銷令牌、重置秘密並推出更復雜的混淆算法。

您可能需要閱讀OAuth 2.0 for Native Apps [RFC7636]規范。 它指出:

公共原生應用客戶端必須實現 OAuth 的代碼交換證明密鑰 (PKCE [RFC7636]) 擴展,並且授權服務器必須支持此類客戶端的 PKCE,原因在第 8.1 節中詳述。

也請檢查以下答案。

如何在 WSO2 APIM 中不發送 client_secret 實現 Oauth2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM