服務如何註冊其SPN
在用戶端可以使用SPN來驗證服務的實例之前,必須在服務實例將用來登入的使用者或計算機帳戶上註冊SPN。 一般而言,SPN 註冊是由以網域系統管理員許可權執行的服務安裝程式來完成。
在主電腦上安裝服務實例的服務安裝程式通常會執行下列程式。
為服務實例註冊 SPN
- 呼叫 DsGetSpn 函式,為服務實例建立一或多個唯一的 SPN。 如需詳細資訊,請參閱 唯一 SPN 的名稱格式。
- 呼叫 DsWriteAccountSpn 函式,以在服務的登入帳戶上註冊名稱。
DsWriteAccountSpn 會將 SPN 註冊為目錄中使用者或電腦帳戶物件的屬性。 使用者 和 計算機 物件具有 servicePrincipalName 屬性,這是用來儲存與使用者或計算機帳戶相關聯之所有 SPN 的多值屬性。 如果服務在用戶帳戶下執行,SPN 會儲存在該帳戶的 servicePrincipalName 屬性中。 如果服務在 LocalSystem 帳戶中執行,SPN 會儲存在服務主計算機的帳戶 servicePrincipalName 属性中。 DsWriteAccountSpn 呼叫端必須指定用來儲存 SPN 的帳戶物件的辨別名稱。
為了確保已註冊的SPN安全,無法直接寫入 servicePrincipalName 屬性;它只能藉由呼叫 DsWriteAccountSpn來撰寫。 呼叫端必須具有目標帳戶的 servicePrincipalName 屬性的寫入許可權。 一般而言,寫入許可權預設只會授與網域系統管理員。 不過,有一種特殊情況是,系統允許在 LocalSystem 帳戶下執行的服務在服務主機的計算機帳戶上註冊自己的服務主體名稱 (SPN)。 在此情況下,所寫入的SPN格式必須是本機計算機的 DNS 名稱,>/<主機>“ 和 「<主機>」 的格式必須是 「<服務類別。
DsWriteAccountSpn 也可以從帳戶中移除 SPN。 作業參數指出SPN是要新增至帳戶、從帳戶中移除,還是用來完全取代帳戶的所有目前SPN。 卸載服務實例時,請移除為該實例註冊的任何SPN。
如需有關註冊或取消註冊服務的 SPN 的詳細資訊和程式碼範例,請參閱 為服務註冊 SPN。
使用簡單SPN格式的主機型服務“<服務類別>/<主機>”,可以選擇使用 DsServerRegisterSpn 函式,這兩者都會為服務實例建立和註冊 SPN。 DsServerRegisterSpn 是協助程式函式,會呼叫 DsGetSpn 和 DsWriteAccountSpn。
如需詳細資訊,請參閱 服務登入帳戶。