安全框架︰驗證 | 緩和措施
產品/服務 | 發行項 |
---|---|
Web 應用程式 | |
Database | |
Azure 事件中樞 | |
Azure 信任邊界 | |
Service Fabric 信任邊界 | |
Identity Server | |
電腦信任邊界 | |
WCF | |
Web API | |
Microsoft Entra ID | |
IoT 現場閘道 | |
IoT 雲端閘道 | |
Azure 儲存體 |
考慮使用標準驗證機制來驗證 Web 應用程式
標題 | 詳細資料 |
---|---|
元件 | Web 應用程式 |
SDL 階段 | 組建 |
適用的技術 | 泛型 |
屬性 | N/A |
參考 | N/A |
詳細資料 | 驗證是實體證明其身分識別的程序 (通常透過使用者名稱和密碼等認證)。 有多個驗證通訊協定可列入考量。 下列是其中一些通訊協定︰
考慮使用標準驗證機制來識別來源程序 |
應用程式必須安全地處理失敗的驗證案例
標題 | 詳細資料 |
---|---|
元件 | Web 應用程式 |
SDL 階段 | 組建 |
適用的技術 | 泛型 |
屬性 | N/A |
參考 | N/A |
詳細資料 | 明確驗證使用者的應用程式必須安全地處理失敗的驗證案例。 驗證機制必須:
測試:
|
啟用升級或調適性驗證
標題 | 詳細資料 |
---|---|
元件 | Web 應用程式 |
SDL 階段 | 組建 |
適用的技術 | 泛型 |
屬性 | N/A |
參考 | N/A |
詳細資料 | 確認應用程式有額外的授權 (例如透過多重要素驗證的升級或調適性驗證,例如以簡訊、電子郵件等傳送 OTP 或提示重新驗證),這麼一來,使用者便會在獲得敏感性資訊的存取權之前受到查問。 此規則也適用於對帳戶或動作進行重大變更 這也表示必須以應用程式正確地強制執行內容相關授權的方式來實作驗證調節,才不會允許藉由竄改參數等方法的未經授權操作 |
確保已適當地鎖定系統管理介面
標題 | 詳細資料 |
---|---|
元件 | Web 應用程式 |
SDL 階段 | 組建 |
適用的技術 | 泛型 |
屬性 | N/A |
參考 | N/A |
詳細資料 | 第一個解決方法是授與只從特定來源 IP 範圍到系統管理介面的存取權。 如果相較於一貫的建議,該解決方案並不可行,則強制執行升級或調適性驗證以便登入系統管理介面 |
安全地實作忘記密碼功能
標題 | 詳細資料 |
---|---|
元件 | Web 應用程式 |
SDL 階段 | 組建 |
適用的技術 | 泛型 |
屬性 | N/A |
參考 | N/A |
詳細資料 | 首先,確認忘記密碼和其他復原路徑會傳送包含限時啟用權杖 (而不是密碼本身) 的連結。 在連結傳出之前,也可能需要以軟式權杖 (例如 SMS 權杖、原生行動應用程式等) 為基礎的其他驗證。 第二,在取得新密碼的過程中,您不得鎖定使用者帳戶。 每當攻擊者決定透過自動化攻擊來刻意鎖定使用者時,這可能會導致拒絕服務攻擊。 第三,在設定新密碼要求的過程中,您顯示的訊息應該一般化,以避免列舉使用者名稱。 第四,一律不允許使用舊密碼並實作強式密碼原則。 |
確保已實作密碼和帳戶原則
標題 | 詳細資料 |
---|---|
元件 | Web 應用程式 |
SDL 階段 | 組建 |
適用的技術 | 泛型 |
屬性 | N/A |
參考 | N/A |
詳細資料 | 必須實作符合組織原則和最佳作法的密碼和帳戶原則。 若要防止暴力密碼破解及以字典為基礎的猜測︰必須實作強式密碼原則,以確保使用者建立複雜的密碼 (例如,長度最少 12 個字元、英數字元和特殊字元)。 帳戶鎖定原則可能會以下列方式實作︰
若要防禦對於預設和可預測帳戶的攻擊,請確認所有金鑰和密碼均可取代,而且會在安裝階段後產生或取代。 如果應用程式必須自動產生密碼,請確保所產生的密碼是隨機的且具有高熵。 |
實作控制項以避免列舉使用者名稱
標題 | 詳細資料 |
---|---|
元件 | Web 應用程式 |
SDL 階段 | 組建 |
適用的技術 | 泛型 |
屬性 | N/A |
參考 | N/A |
步驟 | 應將所有的錯誤訊息一般化,以避免列舉使用者名稱。 而且,您有時無法避免註冊頁面等功能的資訊洩漏。 您需要使用 CAPTCHA 之類的速率限制方法,防止攻擊者的自動化攻擊。 |
可能的話,使用 Windows 驗證連線到 SQL Server
標題 | 詳細資料 |
---|---|
元件 | Database |
SDL 階段 | 組建 |
適用的技術 | 內部部署 |
屬性 | SQL 版本 - 全部 |
參考 | SQL Server - 選擇驗證模式 |
步驟 | Windows 驗證會使用 Kerberos 安全性通訊協定、在增強式密碼的複雜驗證方面提供密碼原則強化、提供對帳戶鎖定的支援,而且支援密碼逾期。 |
可能的話,使用 Microsoft Entra 驗證連線到 SQL Database
標題 | 詳細資料 |
---|---|
元件 | Database |
SDL 階段 | 組建 |
適用的技術 | SQL Azure |
屬性 | SQL 版本 - V12 |
參考 | 使用 Microsoft Entra 驗證連線到 SQL Database (部分機器翻譯) |
步驟 | 最小版本︰需要 Azure SQL Database V12 以允許 Azure SQL Database 對 Microsoft 目錄使用 Microsoft Entra 驗證 |
使用 SQL 驗證模式時,確保在 SQL Server 上強制執行帳戶和密碼原則
標題 | 詳細資料 |
---|---|
元件 | Database |
SDL 階段 | 組建 |
適用的技術 | 泛型 |
屬性 | N/A |
參考 | SQL Server 密碼原則 |
步驟 | 使用 SQL Server 驗證時,系統會在 SQL Server 中建立不是以 Windows 使用者帳戶為基礎的登入。 使用 SQL Server 建立使用者名稱和密碼並儲存在 SQL Server 中。 SQL Server 可以使用 Windows 密碼原則機制。 它可以將 Windows 中使用的相同複雜性和到期原則套用於 SQL Server 內部使用的密碼。 |
請勿在自主資料庫中使用 SQL 驗證
標題 | 詳細資料 |
---|---|
元件 | Database |
SDL 階段 | 組建 |
適用的技術 | 內部部署、SQL Azure |
屬性 | SQL 版本 - MSSQL2012、SQL 版本 - V12 |
參考 | 自主資料庫的安全性最佳做法 |
步驟 | 缺少強制執行的密碼原則,可能會增加在自主資料庫中建立弱式認證的可能性。 利用 Windows 驗證。 |
使用採用 SaS 權杖的每一裝置驗證認證
標題 | 詳細資料 |
---|---|
元件 | Azure 事件中樞 |
SDL 階段 | 組建 |
適用的技術 | 泛型 |
屬性 | N/A |
參考 | 事件中樞驗證和安全性模型概觀 |
步驟 | 事件中樞安全性模型是以共用存取簽章 (SAS) 權杖和事件發佈者的組合為基礎。 發佈者代表可接收權杖的 DeviceID。 這有助於讓所產生的權杖與個別的裝置建立關聯。 在允許偵測承載內部原始來源詐騙嘗試的服務端上,所有訊息都會標示建立者。 驗證裝置時,產生範圍限於唯一發佈者的每個裝置 SaS 權杖。 |
針對 Azure 系統管理員啟用 Microsoft Entra 多重要素驗證
標題 | 詳細資料 |
---|---|
元件 | Azure 信任邊界 |
SDL 階段 | 部署 |
適用的技術 | 泛型 |
屬性 | N/A |
參考 | 什麼是 Microsoft Entra 多重要素驗證? (部分機器翻譯) |
步驟 | 多重要素驗證 (MFA) 是需要多種驗證方法,並在使用者登入和交易中新增重要的第二層安全性的驗證方法。 其運作方式需要下列其中任何二或多個驗證方法:
|
限制 Service Fabric 叢集的匿名存取
標題 | 詳細資料 |
---|---|
元件 | Service Fabric 信任界限 |
SDL 階段 | 部署 |
適用的技術 | 泛型 |
屬性 | 環境 - Azure |
參考 | Service Fabric 叢集安全性案例 |
步驟 | 叢集應一律受到安全保護,以防止未經授權使用者連線您的叢集,特別是當叢集上有生產工作負載正在執行時。 建立 Service Fabric 叢集時,確保安全性模式設定為「安全」並設定必要的 X.509 伺服器憑證。 建立「不安全的」叢集將會在叢集向公用網際網路公開管理端點時,允許任何匿名使用者連線到叢集。 |
確保 Service Fabric 的用戶端對節點憑證不同於節點對節點憑證
標題 | 詳細資料 |
---|---|
元件 | Service Fabric 信任界限 |
SDL 階段 | 部署 |
適用的技術 | 泛型 |
屬性 | 環境 - Azure、環境 - 獨立 |
參考 | Service Fabric 用戶端對節點憑證安全性、使用用戶端憑證連線到安全的叢集 |
步驟 | 用戶端對節點憑證安全性是在建立叢集 (透過 Azure 入口網站、Resource Manager 範本或 JSON 範本) 時,藉由指定系統管理用戶端憑證和 (或) 使用者用戶端憑證來設定的。 您指定的系統管理用戶端憑證和使用者用戶端憑證,應該不同於您為節點對節點安全性指定的主要和次要憑證。 |
使用 Microsoft Entra ID 來向 Service Fabric 叢集驗證用戶端
標題 | 詳細資料 |
---|---|
元件 | Service Fabric 信任界限 |
SDL 階段 | 部署 |
適用的技術 | 泛型 |
屬性 | 環境 - Azure |
參考 | 叢集安全性案例 - 安全性建議 |
步驟 | 除了用戶端憑證,在 Azure 上執行的叢集也可以使用 Microsoft Entra ID 來保護對管理端點的存取。 針對 Azure 叢集,建議您針對節點對節點安全性使用 Microsoft Entra 安全性來驗證用戶端和憑證。 |
確保從經過核准的憑證授權單位 (CA) 取得 Service Fabric 憑證
標題 | 詳細資料 |
---|---|
元件 | Service Fabric 信任界限 |
SDL 階段 | 部署 |
適用的技術 | 泛型 |
屬性 | 環境 - Azure |
參考 | X.509 憑證和 Service Fabric |
步驟 | Service Fabric 會使用 X.509 伺服器憑證驗證節點和用戶端。 在 Service Fabric 中使用憑證時,所需可量的一些重要事項︰
|
使用 Identity Server 所支援的標準驗證案例
標題 | 詳細資料 |
---|---|
元件 | Identity Server |
SDL 階段 | 組建 |
適用的技術 | 泛型 |
屬性 | N/A |
參考 | IdentityServer3 - 概觀 |
步驟 | 以下是 Identity Server 支援的典型互動︰
|
以可調整的替代項目覆寫預設 Identity Server 權杖快取
標題 | 詳細資料 |
---|---|
元件 | Identity Server |
SDL 階段 | 部署 |
適用的技術 | 泛型 |
屬性 | N/A |
參考 | Identity Server 部署 - 快取 |
步驟 | IdentityServer 已內建簡單的記憶體內部快取。 雖然這適用於小規模原生應用程式,但不會針對中間層和後端應用程式進行調整,原因如下︰
|
確保已針對所部署應用程式的二進位檔加上數位簽章
標題 | 詳細資料 |
---|---|
元件 | 機器信任界限 |
SDL 階段 | 部署 |
適用的技術 | 泛型 |
屬性 | N/A |
參考 | N/A |
步驟 | 確保已數位簽署所部署應用程式的二進位檔,以便驗證二進位檔的完整性 |
在連線到 WCF 中的 MSMQ 佇列時啟用驗證
標題 | 詳細資料 |
---|---|
元件 | WCF |
SDL 階段 | 組建 |
適用的技術 | 泛型、NET Framework 3 |
屬性 | N/A |
參考 | MSDN |
步驟 | 程式無法在連線到 MSMQ 佇列時啟用驗證,攻擊者可能會以匿名方式將訊息提交至佇列進行處理。 如果未使用驗證來連線到用來將訊息傳遞至另一個程式的 MSMQ 佇列,攻擊者可能會提交惡意的匿名訊息。 |
範例
以下 WCF 組態檔的 <netMsmqBinding/>
元素會指示 WCF 在連線到 MSMQ 佇列進行訊息傳遞時停用驗證。
<bindings>
<netMsmqBinding>
<binding>
<security>
<transport msmqAuthenticationMode=""None"" />
</security>
</binding>
</netMsmqBinding>
</bindings>
將 MSMQ 設定為隨時需要 Windows 網域或憑證驗證才能處理傳入或傳出訊息。
範例
以下 WCF 組態檔的 <netMsmqBinding/>
元素會指示 WCF 在連線到 MSMQ 佇列時啟用憑證驗證。 用戶端會透過 X.509 憑證來驗證。 用戶端憑證必須位於伺服器的憑證存放區中。
<bindings>
<netMsmqBinding>
<binding>
<security>
<transport msmqAuthenticationMode=""Certificate"" />
</security>
</binding>
</netMsmqBinding>
</bindings>
WCF - 請勿將訊息 clientCredentialType 設定為 none
標題 | 詳細資料 |
---|---|
元件 | WCF |
SDL 階段 | 組建 |
適用的技術 | .NET Framework 3 |
屬性 | 用戶端認證類型 - None |
參考 | MSDN、Fortify |
步驟 | 缺少驗證表示每個人都能夠存取此服務。 不會驗證其用戶端的服務可允許所有使用者進行存取。 設定應用程式以針對用戶端認證進行驗證。 將訊息 clientCredentialType 設定為 Windows 或 [憑證] 即可完成此作業。 |
範例
<message clientCredentialType=""Certificate""/>
WCF - 請勿將傳輸 clientCredentialType 設定為 none
標題 | 詳細資料 |
---|---|
元件 | WCF |
SDL 階段 | 組建 |
適用的技術 | 泛型、.NET Framework 3 |
屬性 | 用戶端認證類型 - None |
參考 | MSDN、Fortify |
步驟 | 缺少驗證表示每個人都能夠存取此服務。 不會驗證其用戶端的服務可允許所有使用者存取其功能。 設定應用程式以針對用戶端認證進行驗證。 將傳輸 clientCredentialType 設定為 Windows 或 [憑證] 即可完成此作業。 |
範例
<transport clientCredentialType=""Certificate""/>
確保使用標準驗證技術來保護 Web API
標題 | 詳細資料 |
---|---|
元件 | Web API |
SDL 階段 | 組建 |
適用的技術 | 泛型 |
屬性 | N/A |
參考 | ASP.NET Web API 中的驗證和授權、外部驗證服務與 ASP.NET Web API (C#) |
步驟 | 驗證是實體證明其身分識別的程序 (通常透過使用者名稱和密碼等認證)。 有多個驗證通訊協定可列入考量。 下列是其中一些通訊協定︰
[參考] 區段中的連結提供如何實作每個驗證方案來保護 Web API 的低階詳細資料。 |
使用 Microsoft Entra ID 所支援的標準驗證案例
標題 | 詳細資料 |
---|---|
元件 | Microsoft Entra ID |
SDL 階段 | 組建 |
適用的技術 | 泛型 |
屬性 | N/A |
參考 | Microsoft Entra ID 的驗證案例 (部分機器翻譯)、Microsoft Entra 程式碼範例 (部分機器翻譯)、Microsoft Entra 開發人員指南 (部分機器翻譯) |
步驟 | Microsoft Entra ID 提供身分識別作為服務,支援業界標準通訊協定 (例如 OAuth 2.0 和 OpenID Connect),以簡化開發人員的驗證工作。 以下是 Microsoft Entra ID 支援的五個主要應用程式案例:
請參閱 [參考] 區段中的連結,以取得低階實作詳細資料 |
以分散式快取覆寫預設 MSAL 權杖快取
標題 | 詳細資料 |
---|---|
元件 | Microsoft Entra ID |
SDL 階段 | 組建 |
適用的技術 | 泛型 |
屬性 | N/A |
參考 | MSAL.NET 中的權杖快取序列化 (英文) |
步驟 | MSAL (Microsoft 驗證程式庫) 使用的預設快取是可調整的記憶體內部快取。 不過,有不同的選項可供您作為替代方案,例如分散式權杖快取。 這些具有 L1/L2 機制,其中 L1 位於記憶體內,而 L2 則是分散式快取實作。 這些可以據以設定以限制 L1 記憶體、加密或設定收回原則。 其他替代方案包括 Redis、SQL Server 或 Azure Comsos DB 快取。 您可以在下列教學課程:開始使用 ASP.NET Core MVC 中找到分散式權杖快取的實作。 |
確保使用 TokenReplayCache 來防止重新執行 MSAL 驗證權杖
標題 | 詳細資料 |
---|---|
元件 | Microsoft Entra ID |
SDL 階段 | 組建 |
適用的技術 | 泛型 |
屬性 | N/A |
參考 | 針對 Web 應用程式使用 Microsoft Entra ID 進行新式驗證 (英文) |
步驟 | TokenReplayCache 屬性可讓開發人員為了確認沒有權杖可使用一次以上,而定義權杖重新執行快取以及可用來儲存權杖的存放區。 這是對抗常見攻擊 (恰如其名的權杖重新執行攻擊) 的措施︰攔截登入時所傳送權杖的攻擊者可能會試著將權杖再次傳送至應用程式 (「重新執行」它),以便建立新的工作階段。 例如,在 OIDC 程式碼授與流程中,使用者驗證成功後,對信賴憑證者之 "/signin-oidc" 端點的要求是由 "id_token"、"code" 和 "state" 參數所構成。 信賴憑證者會驗證此要求並建立新的工作階段。 如果敵人擷取此要求並重新執行它,敵人即可建立成功的工作階段並欺騙使用者。 OpenID Connect 中存在的 nonce 可以限制,但未完全消除可成功發動攻擊的情況。 若要保護其應用程式,開發人員可以提供 ITokenReplayCache 的實作,並將執行個體指派給 TokenReplayCache。 |
範例
// ITokenReplayCache defined in MSAL
public interface ITokenReplayCache
{
bool TryAdd(string securityToken, DateTime expiresOn);
bool TryFind(string securityToken);
}
範例
以下是 ITokenReplayCache 介面的範例實作。 (請自訂並實作您的專案特定快取架構)
public class TokenReplayCache : ITokenReplayCache
{
private readonly ICacheProvider cache; // Your project-specific cache provider
public TokenReplayCache(ICacheProvider cache)
{
this.cache = cache;
}
public bool TryAdd(string securityToken, DateTime expiresOn)
{
if (this.cache.Get<string>(securityToken) == null)
{
this.cache.Set(securityToken, securityToken);
return true;
}
return false;
}
public bool TryFind(string securityToken)
{
return this.cache.Get<string>(securityToken) != null;
}
}
實作的快取必須透過 "TokenValidationParameters" 屬性在 OIDC 選項中參照,如下所示。
OpenIdConnectOptions openIdConnectOptions = new OpenIdConnectOptions
{
AutomaticAuthenticate = true,
... // other configuration properties follow..
TokenValidationParameters = new TokenValidationParameters
{
TokenReplayCache = new TokenReplayCache(/*Inject your cache provider*/);
}
}
請注意,若要測試此設定的有效性,請登入本機受 OIDC 保護的應用程式並擷取 Fiddler 中對 "/signin-oidc"
端點的要求。 若未妥善保護,在 Fiddler 中重新執行此要求會設定新的工作階段 cookie。 在新增 TokenReplayCache 後重新執行要求時,應用程式會擲出例外狀況,如下所示︰SecurityTokenReplayDetectedException: IDX10228: The securityToken has previously been validated, securityToken: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSIsImtpZCI6Ik1uQ1......
使用 MSAL 程式庫來管理從 OAuth2 用戶端至 Microsoft Entra ID (或內部部署 AD) 的權杖要求
標題 | 詳細資料 |
---|---|
元件 | Microsoft Entra ID |
SDL 階段 | 組建 |
適用的技術 | 泛型 |
屬性 | N/A |
參考 | MSAL (部分機器翻譯) |
步驟 | Microsoft 驗證程式庫 (MSAL) 可讓開發人員從 Microsoft 身分識別平台端點取得安全性權杖,以驗證使用者並存取受保護的 Web API。 可以用來提供 Microsoft Graph、其他 Microsoft API、第三方 Web API 或您自己的 Web API 的安全存取。 MSAL 支援許多不同的應用程式架構和平台,包括 .NET、JavaScript、JAVA、Python、Android 和 iOS。 |
MSAL 可讓您透過多種平台通用的 API,以不同方式取得權杖。 無需根據您應用程式中的通訊協定直接使用 OAuth 程式庫或程式碼,且可以代表使用者或應用程式取得權杖 (在適用於該平台的情況下)。
MSAL 也會維護權杖快取,並在權杖即將到期時為您重新整理權杖。 MSAL 也可以協助您指定要讓應用程式登入的對象,以及協助您從設定檔設定應用程式,以及針對您的應用程式進行疑難排解。
驗證連線到現場閘道的裝置
標題 | 詳細資料 |
---|---|
元件 | IoT 現場閘道 |
SDL 階段 | 組建 |
適用的技術 | 泛型 |
屬性 | N/A |
參考 | N/A |
步驟 | 確保每個裝置在接受資料之前,以及在利用雲端閘道進行上游通訊之前,已經由現場閘道驗證。 此外,確保裝置與每一裝置認證連線,即可唯一識別個別裝置。 |
確保會驗證連線到雲端閘道的裝置
標題 | 詳細資料 |
---|---|
元件 | IoT 雲端閘道 |
SDL 階段 | 組建 |
適用的技術 | 泛型、C#、Node.js、 |
屬性 | N/A、閘道選擇 - Azure IoT 中樞 |
參考 | N/A、採用 .NET 的 Azure IoT 中樞、開始使用 IoT 中樞和 Node JS、使用 SAS 和憑證保護 IoT、Git 儲存機制 |
步驟 |
|
範例
static DeviceClient deviceClient;
static string deviceKey = "{device key}";
static string iotHubUri = "{iot hub hostname}";
var messageString = "{message in string format}";
var message = new Message(Encoding.ASCII.GetBytes(messageString));
deviceClient = DeviceClient.Create(iotHubUri, new DeviceAuthenticationWithRegistrySymmetricKey("myFirstDevice", deviceKey));
await deviceClient.SendEventAsync(message);
範例
Node.js:驗證
對稱金鑰
- 在 Azure 上建立 IoT 中樞
- 在裝置識別登錄中建立一個項目
var device = new iothub.Device(null); device.deviceId = <DeviceId > registry.create(device, function(err, deviceInfo, res) {})
- 建立模擬裝置
var clientFromConnectionString = require('azure-iot-device-amqp').clientFromConnectionString; var Message = require('azure-iot-device').Message; var connectionString = 'HostName=<HostName>DeviceId=<DeviceId>SharedAccessKey=<SharedAccessKey>'; var client = clientFromConnectionString(connectionString);
SAS 權杖
- 取得使用對稱金鑰時在內部產生的權杖,但我們也可以明確地產生和使用權杖
- 定義通訊協定︰
var Http = require('azure-iot-device-http').Http;
- 建立 SAS 權杖:
resourceUri = encodeURIComponent(resourceUri.toLowerCase()).toLowerCase(); var deviceName = "<deviceName >"; var expires = (Date.now() / 1000) + expiresInMins * 60; var toSign = resourceUri + '\n' + expires; // using crypto var decodedPassword = new Buffer(signingKey, 'base64').toString('binary'); const hmac = crypto.createHmac('sha256', decodedPassword); hmac.update(toSign); var base64signature = hmac.digest('base64'); var base64UriEncoded = encodeURIComponent(base64signature); // construct authorization string var token = "SharedAccessSignature sr=" + resourceUri + "%2fdevices%2f"+deviceName+"&sig=" + base64UriEncoded + "&se=" + expires; if (policyName) token += "&skn="+policyName; return token;
- 使用 SAS 權杖進行連線︰
Client.fromSharedAccessSignature(sas, Http);
憑證
- 使用任何工具 (例如 OpenSSL) 產生自我簽署的 X509 憑證,以產生 .cert 和 .key 檔案來分別儲存憑證和金鑰
- 使用憑證佈建可接受安全連線的裝置。
var connectionString = '<connectionString>'; var registry = iothub.Registry.fromConnectionString(connectionString); var deviceJSON = {deviceId:"<deviceId>", authentication: { x509Thumbprint: { primaryThumbprint: "<PrimaryThumbprint>", secondaryThumbprint: "<SecondaryThumbprint>" } }} var device = deviceJSON; registry.create(device, function (err) {});
- 使用憑證連接裝置
var Protocol = require('azure-iot-device-http').Http; var Client = require('azure-iot-device').Client; var connectionString = 'HostName=<HostName>DeviceId=<DeviceId>x509=true'; var client = Client.fromConnectionString(connectionString, Protocol); var options = { key: fs.readFileSync('./key.pem', 'utf8'), cert: fs.readFileSync('./server.crt', 'utf8') }; // Calling setOptions with the x509 certificate and key (and optionally, passphrase) will configure the client //transport to use x509 when connecting to IoT Hub client.setOptions(options); //call fn to execute after the connection is set up client.open(fn);
使用每一裝置驗證認證
標題 | 詳細資料 |
---|---|
元件 | IoT 雲端閘道 |
SDL 階段 | 組建 |
適用的技術 | 泛型 |
屬性 | 閘道選擇 - Azure IoT 中樞 |
參考 | Azure IoT 中樞安全性權杖 |
步驟 | 使用每一裝置驗證認證搭配以裝置金鑰或用戶端憑證為基礎的 SaS 權杖,而不是 IoT 中樞共用存取原則。 這可防止其他人在一個裝置或現場閘道上重複使用驗證權杖 |
確保只有必要的容器和 Blob 會取得匿名讀取權限
標題 | 詳細資料 |
---|---|
元件 | Azure 儲存體 |
SDL 階段 | 組建 |
適用的技術 | 泛型 |
屬性 | StorageType - Blob |
參考 | 管理對容器與 Blob 的匿名讀取權限、共用存取簽章,第 1 部分:了解 SAS 模型 |
步驟 | 根據預設,可能只有儲存體帳戶的擁有者能存取容器及其內部的任何 Blob。 若要為匿名使用者授與容器及其 Blob 的讀取權限,您可以設定容器權限以允許公用存取。 匿名使用者可以讀取可公開存取之容器內的 Blob,而不需驗證要求。 容器會提供下列選項來管理容器存取:
匿名存取適用於某些 Blob 應永遠可供匿名讀取存取的狀況。 如需更精密的控制,您可以建立共用存取簽章,以便在指定的時間間隔內,使用不同的權限來委派受限制的存取權。 確保容器和 Blob (可能包含敏感性資料) 不會意外取得匿名存取權 |
使用 SAS 或 SAP 對 Azure 儲存體中的物件授與有限的存取權
標題 | 詳細資料 |
---|---|
元件 | Azure 儲存體 |
SDL 階段 | 組建 |
適用的技術 | 泛型 |
屬性 | N/A |
參考 | 共用存取簽章,第 1 部分:了解 SAS 模型、共用存取簽章,第 2 部分:透過 Blob 儲存體建立及使用 SAS、如何使用共用存取簽章和預存存取原則將存取權委派給帳戶中的物件 |
步驟 | 若要在無需公開帳戶存取金鑰的情況下,將儲存體帳戶中物件的限制存取授與其他用戶端,則使用共用存取簽章 (SAS) 會是個佷有效的方式。 SAS 是一種 URI,URI 會在其查詢參數中包含通過驗證存取儲存體資源的所有必要資訊。 若要使用 SAS 存取儲存體資源,用戶端只需在適當的建構函式或方法中傳入 SAS 即可。 當您想要將儲存體帳戶中的資源存取權提供給無法放心託付帳戶金鑰的用戶端時,您可以使用 SAS。 您的儲存體帳戶金鑰包括主要和次要金鑰,兩者皆可授與帳戶及帳戶內所有資源的系統管理存取權。 提供任一帳戶金鑰都會讓您的帳戶受到惡意或粗心使用的可能性。 共用存取簽章提供一個安全的替代方式,無需帳戶金鑰便可讓其他用戶端根據他們被授與的權限,來讀取、寫入及刪除儲存體帳戶中的資料。 如果您每次都有一組類似的邏輯參數,使用預存存取原則 (SAP) 會是個不錯的做法。 因為使用衍生自預存存取原則的 SAS 讓您能夠立即撤銷該 SAS,所以建議的最佳做法是一律儲存預存存取原則 (如果可能)。 |