SpnEndpointIdentity 类

定义

表示当绑定使用 Kerberos 时标识的服务主体名称 (SPN)。

public ref class SpnEndpointIdentity : System::ServiceModel::EndpointIdentity
public class SpnEndpointIdentity : System.ServiceModel.EndpointIdentity
type SpnEndpointIdentity = class
    inherit EndpointIdentity
Public Class SpnEndpointIdentity
Inherits EndpointIdentity
继承
SpnEndpointIdentity

示例

下面的代码演示创建此类的实例的一种常用方式。

static EndpointIdentity CreateIdentity()
 {
     WindowsIdentity self = WindowsIdentity.GetCurrent();
     SecurityIdentifier sid = self.User;

     EndpointIdentity identity = null;

     if (sid.IsWellKnown(WellKnownSidType.LocalSystemSid) ||
         sid.IsWellKnown(WellKnownSidType.NetworkServiceSid) ||
         sid.IsWellKnown(WellKnownSidType.LocalServiceSid))
     {
         identity = EndpointIdentity.CreateSpnIdentity(
             string.Format(CultureInfo.InvariantCulture, "host/{0}", GetMachineName()));
     }
     else
     {
         // Need an UPN string here
         string domain = GetPrimaryDomain();
         if (domain != null)
         {
             string[] split = self.Name.Split('\\');
             if (split.Length == 2)
             {
                 identity = EndpointIdentity.CreateUpnIdentity(split[1] + "@" + domain);
             }
         }
     }

     return identity;
 }
Private Shared Function CreateIdentity() As EndpointIdentity
     Dim self As WindowsIdentity = WindowsIdentity.GetCurrent()
     Dim sid As SecurityIdentifier = self.User

     Dim identity As EndpointIdentity = Nothing

     If sid.IsWellKnown(WellKnownSidType.LocalSystemSid) OrElse sid.IsWellKnown(WellKnownSidType.NetworkServiceSid) OrElse sid.IsWellKnown(WellKnownSidType.LocalServiceSid) Then
         identity = EndpointIdentity.CreateSpnIdentity(String.Format(CultureInfo.InvariantCulture, "host/{0}", GetMachineName()))
     Else
         ' Need an UPN string here
         Dim domain As String = GetPrimaryDomain()
         If domain IsNot Nothing Then
             Dim split() As String = self.Name.Split("\"c)
             If split.Length = 2 Then
                 identity = EndpointIdentity.CreateUpnIdentity(split(1) & "@" & domain)
             End If
         End If
     End If

     Return identity
End Function

注解

SPN 是一个名称,客户端通过该名称唯一地标识服务实例。 如果在计算机的整个目录林上安装多个服务实例,那么每个实例都必须有自己的 SPN。 如果客户端有多个名称可用于身份验证,则给定的服务实例可以有多个 SPN。

当客户端要连接服务时,它将定位服务实例,构成此实例的 SPN,并且将标识设置为 SpnEndpointIdentity。 并检查消息是否适用于此服务。

在 Kerberos 中使用的三种身份验证模式为:

  • SSPINegotiate

  • Kerberos

  • KerberosOverTransport。

构造函数

SpnEndpointIdentity(Claim)

使用指定的标识声明初始化 SpnEndpointIdentity 的新实例。

SpnEndpointIdentity(String)

使用指定的服务主体名称 (SPN) 初始化 SpnEndpointIdentity 的新实例。

属性

IdentityClaim

获取对应于此标识的标识声明。

(继承自 EndpointIdentity)
SpnLookupTime

指定查找服务主体名称 (SPN) 的最大时间。

方法

Equals(Object)

返回一个值,该值确定指定的对象是否与当前的标识对象相等,或者它们是否拥有相等的安全属性。

(继承自 EndpointIdentity)
GetHashCode()

提供当前标识实例的哈希代码。

(继承自 EndpointIdentity)
GetType()

获取当前实例的 Type

(继承自 Object)
Initialize(Claim)

使用指定的声明初始化 EndpointIdentity

(继承自 EndpointIdentity)
Initialize(Claim, IEqualityComparer<Claim>)

使用指定的声明和接口初始化 EndpointIdentity 并对相等性进行比较。

(继承自 EndpointIdentity)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
ToString()

返回标识。

(继承自 EndpointIdentity)

适用于