Share via


使用 Azure SDK for Go 進行驗證 (舊版)

重要

本文適用於舊版的 Azure SDK for Go。 若要向最新的模組進行驗證,請使用 Azure 身分識別套件。

Azure SDK for Go 提供多種方式來向 Azure 進行驗證。 這些驗證 類型 是透過不同的驗證 方法叫用。 本文涵蓋可用的類型、方法,以及如何選擇最適合您應用程式的類型。

可用的驗證類型和方法

Azure SDK for Go 提供數種不同類型的驗證,並使用不同的認證集合。 每個驗證類型都可透過不同的驗證方法取得,也就是 SDK 如何接受這些認證作為輸入。 下表說明可用的驗證類型,以及應用程式建議使用的驗證類型。

驗證類型 建議使用時機...
憑證型驗證 您有已針對 Microsoft Entra 使用者或服務主體設定的 X509 憑證。 若要深入瞭解,請參閱 開始使用 Microsoft Entra ID 中的憑證式驗證。
用戶端認證 您已設定此應用程式的服務主體,或它所屬的應用程式類別。 若要深入瞭解,請參閱 使用 Azure CLI 建立服務主體。
適用於 Azure 資源的受控識別 您的應用程式正在已設定受控識別的 Azure 資源上執行。 若要深入瞭解,請參閱 Azure 資源的受控識別。
裝置令牌 您的應用程式僅供互動使用。 使用者可能已啟用多重要素驗證。 用戶可以存取網頁瀏覽器來登入。 如需詳細資訊,請參閱 使用裝置令牌驗證
使用者名稱/密碼 您有無法使用任何其他驗證方法的互動式應用程式。 您的使用者未為其 Microsoft Entra 登入啟用多重要素驗證。

重點

  • 如果您使用客戶端認證以外的驗證類型,您的應用程式必須在 Microsoft Entra ID 中註冊。 若要瞭解如何,請參閱 整合應用程式與 Microsoft Entra ID
  • 除非您有特殊需求,否則請避免使用者名稱/密碼驗證。 在適當使用者型登入的情況下,通常可以使用裝置令牌驗證。

這些驗證類型可透過不同的方法取得。

所有驗證函式和類型都可在 github.com/Azure/go-autorest/autorest/azure/auth 套件中使用

注意

除非您有特殊需求,否則請避免用戶端型驗證。 這種驗證方法鼓勵不良做法。 特別是,使用用戶端型驗證會讓難以硬式編碼的認證。 如果驗證需求變更,撰寫用於驗證的自定義程式代碼也可能在未來的 SDK 版本中中斷。

使用環境型驗證

如果您是在受控設定中執行應用程式,則以環境為基礎的驗證是自然選擇。 使用此驗證方法,您會在執行應用程式之前設定殼層環境。 在運行時間,Go SDK 會讀取這些環境變數,以向 Azure 進行驗證。

環境型驗證支援裝置令牌以外的所有驗證類型,依下列順序進行評估:

  • 用戶端認證
  • 憑證型驗證
  • 使用者名稱/密碼
  • 適用於 Azure 資源的受控識別

如果驗證類型有未設定的值或遭到拒絕,SDK 會自動嘗試下一個驗證類型。 當沒有其他類型可供嘗試時,SDK 會傳回錯誤。

下表詳細說明環境型驗證所支援之每個驗證類型必須設定的環境變數。

驗證類型 環境變數 描述
用戶端認證 AZURE_TENANT_ID 服務主體所屬Active Directory租使用者的標識碼。
AZURE_CLIENT_ID 服務主體的名稱或標識碼。
AZURE_CLIENT_SECRET 與服務主體相關聯的秘密。
[MSSQLSERVER 的通訊協定內容] AZURE_TENANT_ID 憑證註冊之 Active Directory 租用戶的標識碼。
AZURE_CLIENT_ID 與憑證相關聯的應用程式用戶端標識碼。
AZURE_CERTIFICATE_PATH 用戶端憑證檔案的路徑。
AZURE_CERTIFICATE_PASSWORD 用戶端憑證的密碼。
用戶名稱/密碼 AZURE_TENANT_ID 用戶所屬 Active Directory 租使用者的識別碼。
AZURE_CLIENT_ID 應用程式用戶端識別碼。
AZURE_USERNAME 要用來登入的用戶名稱。
AZURE_PASSWORD 要用來登入的密碼。
受控識別 受控識別驗證不需要任何認證。 應用程式必須在設定為使用受控識別的 Azure 資源上執行。 如需詳細資訊,請參閱 Azure 資源的受控識別。

若要連線到預設 Azure 公用雲端以外的雲端或管理端點,請設定下列環境變數。 最常見的原因是您使用 Azure Stack、不同地理區域中的雲端或傳統部署模型。

環境變數 描述
AZURE_ENVIRONMENT 要連線的雲端環境名稱。
AZURE_AD_RESOURCE 線上時要使用的 Active Directory 資源識別碼,作為管理端點的 URI。

使用環境型驗證時,呼叫 NewAuthorizerFromEnvironment 函式以取得您的授權者物件。 接著,此物件會在用戶端的 屬性上 Authorizer 設定,以允許他們存取 Azure。

import "github.com/Azure/go-autorest/autorest/azure/auth"
authorizer, err := auth.NewAuthorizerFromEnvironment()

Azure Stack 上的驗證

若要在 Azure Stack 上驗證,您必須設定下列變數:

環境變數 描述
AZURE_AD_ENDPOINT Active Directory 端點。
AZURE_AD_RESOURCE Active Directory 資源標識符。

您可以從 Azure Stack 元數據資訊擷取這些變數。 若要擷取元數據,請在 Azure Stack 環境中開啟網頁瀏覽器,並使用 url: (ResourceManagerURL)/metadata/endpoints?api-version=1.0

ResourceManagerURL會根據 Azure Stack 部署的區域名稱、電腦名稱和外部完整功能變數名稱 (FQDN) 而有所不同:

Environment ResourceManagerURL
開發套件 https://management.local.azurestack.external/
整合式系統 https://management.(region).ext-(machine-name).(FQDN)

如需如何使用 Azure SDK for Go on Azure Stack 的詳細資訊,請參閱 在 Azure Stack 中搭配 Go 使用 API 版本設定檔

使用檔案型驗證

檔案型驗證會使用 Azure CLI 所產生的檔案格式。 使用 參數建立新的服務主體 --sdk-auth 時,您可以輕鬆地建立此檔案。 如果您打算使用檔案型驗證,請確定建立服務主體時會提供此自變數。 由於 CLI 會將輸出列印至 stdout,因此會將輸出重新導向至檔案。

az ad sp create-for-rbac --role Contributor \
    --scopes /subscriptions/<subscription_id> \
    --sdk-auth > azure.auth

AZURE_AUTH_LOCATION 環境變數設定為授權檔所在的位置。 應用程式會讀取此環境變數,並剖析其內的認證。 如果您需要在運行時間選取授權檔,請使用 os操作程序的環境。Setenv 函 式。

若要載入驗證資訊,請呼叫 NewAuthorizerFromFile 函式。 不同於環境型授權,檔案型授權需要資源端點。

import "github.com/Azure/go-autorest/autorest/azure/auth"
authorizer, err := NewAuthorizerFromFile(azure.PublicCloud.ResourceManagerEndpoint)

如需使用服務主體和管理其訪問許可權的詳細資訊,請參閱 使用 Azure CLI 建立服務主體。

使用裝置令牌驗證

如果您想要讓使用者以互動方式登入,最好的方式是透過裝置令牌驗證。 此驗證流程會將令牌傳遞給使用者,以貼到 Microsoft 登入網站,然後透過 Microsoft Entra 帳戶進行驗證。 此驗證方法支援已啟用多重要素驗證的帳戶,與標準使用者名稱/密碼驗證不同。

若要使用裝置令牌驗證,請使用 NewDeviceFlowConfig 函式建立 DeviceFlowConfig 授權者。 在產生的物件上呼叫 授權者 ,以啟動驗證程式。 裝置流程驗證會封鎖程序執行,直到整個驗證流程完成為止。

import "github.com/Azure/go-autorest/autorest/azure/auth"
deviceConfig := auth.NewDeviceFlowConfig(applicationID, tenantID)
authorizer, err := deviceConfig.Authorizer()

使用驗證用戶端

如果您需要特定類型的驗證,而且願意讓程式執行工作以從使用者載入驗證資訊,您可以使用任何符合驗證的 用戶端。AuthorizerConfig 介面。 當您執行下列作業時,請使用實作此介面的類型:

  • 撰寫互動式程式
  • 使用特製化組態檔
  • 具有防止使用內建驗證方法的需求

警告

永不將 Azure 認證硬式編碼至應用程式。 將秘密放入應用程式二進位檔,可讓攻擊者更輕鬆地擷取秘密,無論應用程式是否正在執行。 這會將認證授權的所有 Azure 資源置於風險中!

下表列出 SDK 中符合 介面的類型 AuthorizerConfig

驗證類型 授權者類型
憑證型驗證 ClientCertificateConfig
用戶端認證 ClientCredentialsConfig
適用於 Azure 資源的受控識別 MSIConfig
使用者名稱/密碼 UsernamePasswordConfig

使用其相關聯的 New 函式建立驗證器,然後在產生的 物件上呼叫 Authorize 以驗證。 例如,若要使用憑證式驗證:

import "github.com/Azure/go-autorest/autorest/azure/auth"
certificateAuthorizer := auth.NewClientCertificateConfig(certificatePath, certificatePassword, clientID, tenantID)
authorizerToken, err := certificateAuthorizer.Authorizer()

下一步