服務如何註冊其SPN

在用戶端可以使用SPN來驗證服務的實例之前,必須在服務實例將用來登入的使用者或計算機帳戶上註冊SPN。 一般而言,SPN 註冊是由以網域系統管理員許可權執行的服務安裝程式來完成。

在主電腦上安裝服務實例的服務安裝程式通常會執行下列程式。

註冊服務實例的SPN

  1. 呼叫 DsGetSpn 函式,為服務實例建立一或多個唯一的 SPN。 如需詳細資訊,請參閱 唯一SPN的名稱格式。
  2. 呼叫 DsWriteAccountSpn 函式,以在服務的登入帳戶上註冊名稱。

DsWriteAccountSpn 會將 SPN 註冊為目錄中使用者或電腦帳戶對象的屬性。 usercomputer 物件具有 servicePrincipalName 屬性,這是多值屬性,用來儲存與使用者或計算機帳戶相關聯的所有 SPN。 如果服務在用戶帳戶下執行,SPN 會儲存在該帳戶的 servicePrincipalName 屬性中。 如果服務在 LocalSystem 帳戶中執行,SPN 會儲存在 服務主計算機的帳戶 servicePrincipalName 屬性中。 DsWriteAccountSpn 呼叫端必須指定用來儲存 SPN 之帳戶對象的辨別名稱。

為了確保已註冊的 SPN 安全, 無法直接寫入 servicePrincipalName 屬性;它只能藉由呼叫 DsWriteAccountSpn 來寫入。 呼叫端必須具有目標帳戶 servicePrincipalName 屬性的寫入許可權。 一般而言,寫入許可權預設只會授與網域系統管理員。 不過,有一種特殊情況是,系統允許在本機系統帳戶下執行的服務在服務主機的計算機帳戶上註冊自己的SPN。 在此情況下,正在寫入的SPN格式必須是 「<服務類別>/<主機」,而「<主機>>」必須是本機計算機的 DNS 名稱。

DsWriteAccountSpn 也可以從帳戶中移除 SPN。 作業參數指出SPN是要新增至帳戶、從帳戶中移除,還是用來完全取代帳戶的所有目前SPN。 卸載服務實例時,請移除為該實例註冊的任何SPN。

如需詳細資訊和註冊或取消註冊服務 SPN 的程式代碼範例,請參閱 註冊服務的 SPN。

使用簡單SPN格式的主機型服務「<服務類別>/<主機>」,可以選擇使用 DsServerRegisterSpn 函式,這兩者都會為服務實例建立和註冊SPN。 DsServerRegisterSpn 是呼叫 DsGetSpn DsWriteAccountSpn 的協助程式函式。

如需詳細資訊,請參閱 服務登入帳戶