Aracılığıyla paylaş


İzlenecek Yol: Özel İstemci ve Hizmet Kimlik Bilgileri Oluşturma

Bu konu başlığında, özel istemci ve hizmet kimlik bilgilerinin nasıl uygulandığı ve uygulama kodundan özel kimlik bilgilerinin nasıl kullanılacağı gösterilmektedir.

Kimlik Bilgileri Genişletilebilirlik Sınıfları

ClientCredentials ve ServiceCredentials sınıfları, Windows Communication Foundation (WCF) güvenlik genişletilebilirliğinin ana giriş noktalarıdır. Bu kimlik bilgileri sınıfları, uygulama kodunun kimlik bilgileri bilgilerini ayarlamasını ve kimlik bilgisi türlerini güvenlik belirteçlerine dönüştürmesini sağlayan API'leri sağlar. (Güvenlik belirteçleri , SOAP iletilerinin içinde kimlik bilgileri iletmek için kullanılan formlardır.) Bu kimlik bilgisi sınıflarının sorumlulukları iki alana ayrılabilir:

  • Kimlik bilgileri bilgilerini ayarlamak için uygulamaların API'lerini sağlayın.

  • Uygulamalar için SecurityTokenManager bir fabrika olarak gerçekleştirin.

WCF'de sağlanan varsayılan uygulamalar, sistem tarafından sağlanan kimlik bilgisi türlerini destekler ve bu kimlik bilgileri türlerini işleyebilen bir güvenlik belirteci yöneticisi oluşturur.

Özelleştirme Nedenleri

İstemci veya hizmet kimlik bilgisi sınıflarını özelleştirmenin birden çok nedeni vardır. En önemlisi, özellikle aşağıdaki nedenlerle, sistem tarafından sağlanan kimlik bilgisi türlerini işleme konusunda varsayılan WCF güvenlik davranışını değiştirme gereksinimidir:

  • Diğer genişletilebilirlik noktaları kullanılarak mümkün olmayan değişiklikler.

  • Yeni kimlik bilgisi türleri ekleniyor.

  • Yeni özel güvenlik belirteci türleri ekleniyor.

Bu konuda, özel istemci ve hizmet kimlik bilgilerinin nasıl uygulandığı ve uygulama kodundan nasıl kullanılacağı açıklanmaktadır.

Serinin İlki

Kimlik bilgilerini özelleştirmenin nedeni kimlik bilgileri sağlama, güvenlik belirteci serileştirme veya kimlik doğrulamasıyla ilgili WCF davranışını değiştirmek olduğundan, özel kimlik bilgileri sınıfı oluşturmak yalnızca ilk adımdır. Bu bölümdeki diğer konular, özel serileştiricilerin ve kimlik doğrulayıcıların nasıl oluşturulacağını açıklar. Bu bağlamda, özel kimlik bilgisi sınıfı oluşturmak serinin ilk konusudur. Sonraki eylemler (özel serileştiriciler ve kimlik doğrulayıcılar oluşturma) ancak özel kimlik bilgileri oluşturulduktan sonra gerçekleştirilebilir. Bu konuyu oluşturan ek konular şunlardır:

Yordamlar

Özel istemci kimlik bilgilerini uygulamak için

  1. sınıfından ClientCredentials türetilmiş yeni bir sınıf tanımlayın.

  2. isteğe bağlı. Yeni kimlik bilgisi türleri için yeni yöntemler veya özellikler ekleyin. Yeni kimlik bilgisi türleri eklemezseniz bu adımı atlayın. Aşağıdaki örnek bir CreditCardNumber özellik ekler.

  3. CreateSecurityTokenManager yöntemini geçersiz kılın. Bu yöntem, özel istemci kimlik bilgileri kullanıldığında WCF güvenlik altyapısı tarafından otomatik olarak çağrılır. Bu yöntem, sınıfının bir uygulamasının örneğini oluşturmak ve döndürmekten SecurityTokenManager sorumludur.

    Önemli

    Özel bir güvenlik belirteci yöneticisi oluşturmak için yönteminin geçersiz kılındığını CreateSecurityTokenManager unutmayın. 'den ClientCredentialsSecurityTokenManagertüretilen güvenlik belirteci yöneticisinin, gerçek güvenlik belirtecini oluşturmak için' den SecurityTokenProvidertüretilmiş özel bir güvenlik belirteci sağlayıcısı döndürmesi gerekir. Güvenlik belirteçleri oluşturmak için bu deseni izlemezseniz, nesneler önbelleğe alınırken ChannelFactory uygulamanız yanlış çalışabilir (WCF istemci proxy'leri için varsayılan davranıştır), potansiyel olarak ayrıcalık yükseltme saldırısına neden olabilir. Özel kimlik bilgisi nesnesi, öğesinin ChannelFactorybir parçası olarak önbelleğe alınır. Ancak özel, SecurityTokenManager belirteç oluşturma mantığı içine yerleştirildiği sürece güvenlik tehdidini azaltan her çağrıda SecurityTokenManageroluşturulur.

  4. CloneCore yöntemini geçersiz kılın.

    public class MyClientCredentials : ClientCredentials
    {
        string creditCardNumber;
    
        public MyClientCredentials()
        {
            // Perform client credentials initialization.
        }
    
        protected MyClientCredentials(MyClientCredentials other)
            : base(other)
        {
            // Clone fields defined in this class.
            this.creditCardNumber = other.creditCardNumber;
        }
    
        public string CreditCardNumber
        {
            get
            {
                return this.creditCardNumber;
            }
            set
            {
                if (value == null)
                {
                    throw new ArgumentNullException("value");
                }
                this.creditCardNumber = value;
            }
        }
    
        public override SecurityTokenManager CreateSecurityTokenManager()
        {
            // Return your implementation of the SecurityTokenManager.
            return new MyClientCredentialsSecurityTokenManager(this);
        }
    
        protected override ClientCredentials CloneCore()
        {
            // Implement the cloning functionality.
            return new MyClientCredentials(this);
        }
    }
    
    Public Class MyClientCredentials
        Inherits ClientCredentials
        Private creditCardNumberValue As String
    
        Public Sub New()
    
        End Sub
    
        ' Perform client credentials initialization.    
        Protected Sub New(ByVal other As MyClientCredentials)
            MyBase.New(other)
            ' Clone fields defined in this class.
            Me.creditCardNumberValue = other.creditCardNumberValue
    
        End Sub
    
        Public Property CreditCardNumber() As String
            Get
                Return Me.creditCardNumberValue
            End Get
            Set
                If value Is Nothing Then
                    Throw New ArgumentNullException("value")
                End If
                Me.creditCardNumberValue = value
            End Set
        End Property
    
        Public Overrides Function CreateSecurityTokenManager() As SecurityTokenManager
            ' Return your implementation of the SecurityTokenManager.
            Return New MyClientCredentialsSecurityTokenManager(Me)
    
        End Function
    
        Protected Overrides Function CloneCore() As ClientCredentials
            ' Implement the cloning functionality.
            Return New MyClientCredentials(Me)
    
        End Function
    End Class
    

Özel istemci güvenlik belirteci yöneticisi uygulamak için

  1. öğesinden ClientCredentialsSecurityTokenManagertüretilmiş yeni bir sınıf tanımlayın.

  2. isteğe bağlı. CreateSecurityTokenProvider(SecurityTokenRequirement) Özel SecurityTokenProvider bir uygulama oluşturulması gerekiyorsa yöntemini geçersiz kılın. Özel güvenlik belirteci sağlayıcıları hakkında daha fazla bilgi için bkz . Nasıl yapılır: Özel Güvenlik Belirteci Sağlayıcısı Oluşturma.

  3. isteğe bağlı. CreateSecurityTokenAuthenticator(SecurityTokenRequirement, SecurityTokenResolver) Özel SecurityTokenAuthenticator bir uygulama oluşturulması gerekiyorsa yöntemini geçersiz kılın. Özel güvenlik belirteci doğrulayıcıları hakkında daha fazla bilgi için bkz . Nasıl yapılır: Özel Güvenlik Belirteci Doğrulayıcı Oluşturma.

  4. isteğe bağlı. Özel SecurityTokenSerializer bir öğe CreateSecurityTokenSerializer oluşturulması gerekiyorsa yöntemini geçersiz kılın. Özel güvenlik belirteçleri ve özel güvenlik belirteci serileştiricileri hakkında daha fazla bilgi için bkz . Nasıl yapılır: Özel Belirteç Oluşturma.

    internal class MyClientCredentialsSecurityTokenManager :
        ClientCredentialsSecurityTokenManager
    {
        MyClientCredentials credentials;
    
        public MyClientCredentialsSecurityTokenManager(MyClientCredentials credentials)
            : base(credentials)
        {
            this.credentials = credentials;
        }
    
        public override SecurityTokenProvider CreateSecurityTokenProvider(
            SecurityTokenRequirement tokenRequirement)
        {
            // Return your implementation of the SecurityTokenProvider, if required.
            // This implementation delegates to the base class.
            return base.CreateSecurityTokenProvider(tokenRequirement);
        }
    
        public override SecurityTokenAuthenticator CreateSecurityTokenAuthenticator(
            SecurityTokenRequirement tokenRequirement, out SecurityTokenResolver outOfBandTokenResolver)
        {
            // Return your implementation of the SecurityTokenAuthenticator, if required.
            // This implementation delegates to the base class.
            return base.CreateSecurityTokenAuthenticator(tokenRequirement, out outOfBandTokenResolver);
        }
    
        public override SecurityTokenSerializer CreateSecurityTokenSerializer(SecurityTokenVersion version)
        {
            // Return your implementation of the SecurityTokenSerializer, if required.
            // This implementation delegates to the base class.
            return base.CreateSecurityTokenSerializer(version);
        }
    }
    
    
    Friend Class MyClientCredentialsSecurityTokenManager
        Inherits ClientCredentialsSecurityTokenManager
        Private credentials As MyClientCredentials
    
    
        Public Sub New(ByVal credentials As MyClientCredentials)
            MyBase.New(credentials)
            Me.credentials = credentials
    
        End Sub
    
    
        Public Overrides Function CreateSecurityTokenProvider( _
        ByVal tokenRequirement As SecurityTokenRequirement) As SecurityTokenProvider
            ' Return your implementation of the SecurityTokenProvider, if required.
            ' This implementation delegates to the base class.
            Return MyBase.CreateSecurityTokenProvider(tokenRequirement)
    
        End Function
    
    
        Public Overrides Function CreateSecurityTokenAuthenticator( _
        ByVal tokenRequirement As SecurityTokenRequirement, _
        ByRef outOfBandTokenResolver As SecurityTokenResolver) As SecurityTokenAuthenticator
            ' Return your implementation of the SecurityTokenAuthenticator, if required.
            ' This implementation delegates to the base class.
            Return MyBase.CreateSecurityTokenAuthenticator(tokenRequirement, outOfBandTokenResolver)
    
        End Function
    
    
        Public Overrides Function CreateSecurityTokenSerializer(ByVal version As SecurityTokenVersion) _
        As SecurityTokenSerializer
            ' Return your implementation of the SecurityTokenSerializer, if required.
            ' This implementation delegates to the base class.
            Return MyBase.CreateSecurityTokenSerializer(version)
    
        End Function
    End Class
    

Uygulama kodundan özel istemci kimlik bilgilerini kullanmak için

  1. Oluşturulan istemcinin hizmet arabirimini temsil eden bir örneğini oluşturun veya iletişim kurmak istediğiniz hizmete işaret eden bir örneği ChannelFactory oluşturun.

  2. Sistem tarafından sağlanan istemci kimlik bilgileri davranışını, özelliği aracılığıyla Endpoint erişilebilen koleksiyondan Behaviors kaldırın.

  3. Özel istemci kimlik bilgileri sınıfının yeni bir örneğini oluşturun ve özelliği Behaviors aracılığıyla erişilebilen koleksiyona Endpoint ekleyin.

    // Create a client with the client endpoint configuration.
    CalculatorClient client = new CalculatorClient();
    
    // Remove the ClientCredentials behavior.
    client.ChannelFactory.Endpoint.Behaviors.Remove<ClientCredentials>();
    
    // Add a custom client credentials instance to the behaviors collection.
    client.ChannelFactory.Endpoint.Behaviors.Add(new MyClientCredentials());
    
    ' Create a client with the client endpoint configuration.
    Dim client As New CalculatorClient()
    
    ' Remove the ClientCredentials behavior.
    client.ChannelFactory.Endpoint.Behaviors.Remove(Of ClientCredentials)()
    
    ' Add a custom client credentials instance to the behaviors collection.
    client.ChannelFactory.Endpoint.Behaviors.Add(New MyClientCredentials())
    

Önceki yordam, uygulama kodundan istemci kimlik bilgilerinin nasıl kullanılacağını gösterir. WCF kimlik bilgileri, uygulama yapılandırma dosyası kullanılarak da yapılandırılabilir. Kaynakta değişiklik yapmak, yeniden derlemek ve yeniden dağıtmak zorunda kalmadan uygulama parametrelerinin değiştirilmesine olanak sağladığından, uygulama yapılandırmasını kullanmak genellikle sabit kodlamaya tercih edilir.

Sonraki yordamda özel kimlik bilgilerinin yapılandırılması için nasıl destek sağlandığı açıklanmaktadır.

Özel istemci kimlik bilgileri için yapılandırma işleyicisi oluşturma

  1. öğesinden ClientCredentialsElementtüretilmiş yeni bir sınıf tanımlayın.

  2. isteğe bağlı. Uygulama yapılandırması aracılığıyla kullanıma açmak istediğiniz tüm ek yapılandırma parametrelerinin özelliklerini ekleyin. Aşağıdaki örnekte adlı CreditCardNumberbir özellik eklenmiştir.

  3. BehaviorType yapılandırma öğesiyle oluşturulan özel istemci kimlik bilgileri sınıfının türünü döndürmek için özelliğini geçersiz kılın.

  4. CreateBehavior yöntemini geçersiz kılın. yöntemi, yapılandırma dosyasından yüklenen ayarlara göre özel kimlik bilgisi sınıfının bir örneğini oluşturmaktan ve döndürmekten sorumludur. Özel istemci kimlik bilgileri örneğine yüklenen sistem tarafından sağlanan kimlik bilgileri ayarlarını almak için bu yöntemden temel ApplyConfiguration(ClientCredentials) yöntemi çağırın.

  5. isteğe bağlı. 2. adımda ek özellikler eklediyseniz, yapılandırma çerçevesi için Properties ek yapılandırma ayarlarınızın bunları tanıması için özelliğini geçersiz kılmanız gerekir. Sistem tarafından sağlanan ayarların bu özel istemci kimlik bilgileri yapılandırma öğesi aracılığıyla yapılandırılmasına izin vermek için özelliklerinizi temel sınıf özellikleriyle birleştirin.

    public class MyClientCredentialsConfigHandler : ClientCredentialsElement
    {
        ConfigurationPropertyCollection properties;
    
        public override Type BehaviorType
        {
            get { return typeof(MyClientCredentials); }
        }
    
        public string CreditCardNumber
        {
            get { return (string)base["creditCardNumber"]; }
            set
            {
                if (String.IsNullOrEmpty(value))
                {
                    value = String.Empty;
                }
                base["creditCardNumber"] = value;
            }
        }
    
        protected override ConfigurationPropertyCollection Properties
        {
            get
            {
                if (this.properties == null)
                {
                    ConfigurationPropertyCollection properties = base.Properties;
                    properties.Add(new ConfigurationProperty(
                        "creditCardNumber",
                        typeof(System.String),
                        string.Empty,
                        null,
                        new StringValidator(0, 32, null),
                        ConfigurationPropertyOptions.None));
                    this.properties = properties;
                }
                return this.properties;
            }
        }
    
        protected override object CreateBehavior()
        {
            MyClientCredentials creds = new MyClientCredentials();
            creds.CreditCardNumber = CreditCardNumber;
            base.ApplyConfiguration(creds);
            return creds;
        }
    }
    
    
    Public Class MyClientCredentialsConfigHandler
        Inherits ClientCredentialsElement
        Private propertiesValue As ConfigurationPropertyCollection
    
    
        Public Overrides ReadOnly Property BehaviorType() As Type
            Get
                Return GetType(MyClientCredentials)
            End Get
        End Property
    
        Public Property CreditCardNumber() As String
            Get
                Return CStr(MyBase.Item("creditCardNumber"))
            End Get
            Set
                If String.IsNullOrEmpty(value) Then
                    value = String.Empty
                End If
                MyBase.Item("creditCardNumber") = value
            End Set
        End Property
    
    
        Protected Overrides ReadOnly Property Properties() As ConfigurationPropertyCollection
            Get
                If Me.propertiesValue Is Nothing Then
                    Dim myProperties As ConfigurationPropertyCollection = MyBase.Properties
                    myProperties.Add(New ConfigurationProperty( _
                    "creditCardNumber", _
                    GetType(System.String), _
                    String.Empty, _
                    Nothing, _
                    New StringValidator(0, 32, Nothing), _
                    ConfigurationPropertyOptions.None))
                    Me.propertiesValue = myProperties
                End If
                Return Me.propertiesValue
            End Get
        End Property
    
    
        Protected Overrides Function CreateBehavior() As Object
            Dim creds As New MyClientCredentials()
            creds.CreditCardNumber = Me.CreditCardNumber
            MyBase.ApplyConfiguration(creds)
            Return creds
    
        End Function
    End Class
    

Yapılandırma işleyicisi sınıfına sahip olduktan sonra, WCF yapılandırma çerçevesiyle tümleştirilebilir. Bu, özel istemci kimlik bilgilerinin bir sonraki yordamda gösterildiği gibi istemci uç noktası davranış öğelerinde kullanılmasını sağlar.

Uygulama yapılandırmasında özel istemci kimlik bilgileri yapılandırma işleyicisini kaydetmek ve kullanmak için

  1. Yapılandırma dosyasına bir <extensions> <behaviorExtensions> öğe ve öğe ekleyin.

  2. öğesine bir <add> öğe <behaviorExtensions> ekleyin ve özniteliğini name uygun bir değere ayarlayın.

  3. özniteliğini type tam tür adı olarak ayarlayın. Ayrıca derleme adını ve diğer derleme özniteliklerini de ekleyin.

    <system.serviceModel>
      <extensions>
        <behaviorExtensions>
          <add name="myClientCredentials" type="Microsoft.ServiceModel.Samples.MyClientCredentialsConfigHandler, CustomCredentials, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
        </behaviorExtensions>
      </extensions>
    </system.serviceModel>
    
  4. Yapılandırma işleyicinizi kaydettikten sonra, özel kimlik bilgileri öğesi sistem tarafından sağlanan <clientCredentials> öğe yerine aynı yapılandırma dosyasının içinde kullanılabilir. Hem sistem tarafından sağlanan özellikleri hem de yapılandırma işleyicisi uygulamanıza eklediğiniz yeni özellikleri kullanabilirsiniz. Aşağıdaki örnek özniteliğini kullanarak özel bir özelliğin creditCardNumber değerini ayarlar.

    <behaviors>
      <endpointBehaviors>
        <behavior name="myClientCredentialsBehavior">
          <myClientCredentials creditCardNumber="123-123-123"/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    

Özel hizmet kimlik bilgilerini uygulamak için

  1. öğesinden ServiceCredentialstüretilmiş yeni bir sınıf tanımlayın.

  2. isteğe bağlı. Eklenen yeni kimlik bilgisi değerleri için API'ler sağlamak üzere yeni özellikler ekleyin. Yeni kimlik bilgisi değerleri eklemezseniz bu adımı atlayın. Aşağıdaki örnek bir AdditionalCertificate özellik ekler.

  3. CreateSecurityTokenManager yöntemini geçersiz kılın. Bu yöntem, özel istemci kimlik bilgileri kullanıldığında WCF altyapısı tarafından otomatik olarak çağrılır. yöntemi, sınıfının bir uygulamasının SecurityTokenManager örneğini oluşturmak ve döndürmekten sorumludur (sonraki yordamda açıklanmıştır).

  4. isteğe bağlı. CloneCore yöntemini geçersiz kılın. Bu, yalnızca özel istemci kimlik bilgileri uygulamasına yeni özellikler veya iç alanlar eklendiğinde gereklidir.

    public class MyServiceCredentials : ServiceCredentials
    {
        X509Certificate2 additionalCertificate;
    
        public MyServiceCredentials()
        {
        }
    
        protected MyServiceCredentials(MyServiceCredentials other)
            : base(other)
        {
            this.additionalCertificate = other.additionalCertificate;
        }
    
        public X509Certificate2 AdditionalCertificate
        {
            get
            {
                return this.additionalCertificate;
            }
            set
            {
                if (value == null)
                {
                    throw new ArgumentNullException("value");
                }
                this.additionalCertificate = value;
            }
        }
    
        public override SecurityTokenManager CreateSecurityTokenManager()
        {
            return base.CreateSecurityTokenManager();
        }
    
        protected override ServiceCredentials CloneCore()
        {
            return new MyServiceCredentials(this);
        }
    }
    
    Public Class MyServiceCredentials
        Inherits ServiceCredentials
        Private additionalCertificateValue As X509Certificate2
    
        Public Sub New()
    
        End Sub
    
        Protected Sub New(ByVal other As MyServiceCredentials)
            MyBase.New(other)
            Me.additionalCertificate = other.additionalCertificate
        End Sub
    
    
        Public Property AdditionalCertificate() As X509Certificate2
            Get
                Return Me.additionalCertificateValue
            End Get
            Set
                If value Is Nothing Then
                    Throw New ArgumentNullException("value")
                End If
                Me.additionalCertificateValue = value
            End Set
        End Property
    
        Public Overrides Function CreateSecurityTokenManager() As SecurityTokenManager
            Return MyBase.CreateSecurityTokenManager()
    
        End Function
    
    
        Protected Overrides Function CloneCore() As ServiceCredentials
            Return New MyServiceCredentials(Me)
    
        End Function
    End Class
    

Özel hizmet güvenlik belirteci yöneticisi uygulamak için

  1. sınıfından ServiceCredentialsSecurityTokenManager türetilmiş yeni bir sınıf tanımlayın.

  2. isteğe bağlı. CreateSecurityTokenProvider Özel SecurityTokenProvider bir uygulama oluşturulması gerekiyorsa yöntemini geçersiz kılın. Özel güvenlik belirteci sağlayıcıları hakkında daha fazla bilgi için bkz . Nasıl yapılır: Özel Güvenlik Belirteci Sağlayıcısı Oluşturma.

  3. isteğe bağlı. CreateSecurityTokenAuthenticator Özel SecurityTokenAuthenticator bir uygulama oluşturulması gerekiyorsa yöntemini geçersiz kılın. Özel güvenlik belirteci doğrulayıcıları hakkında daha fazla bilgi için bkz . Nasıl yapılır: Özel Güvenlik Belirteci Doğrulayıcı Oluşturma konusu.

  4. isteğe bağlı. Özel SecurityTokenSerializer bir öğe CreateSecurityTokenSerializer(SecurityTokenVersion) oluşturulması gerekiyorsa yöntemini geçersiz kılın. Özel güvenlik belirteçleri ve özel güvenlik belirteci serileştiricileri hakkında daha fazla bilgi için bkz . Nasıl yapılır: Özel Belirteç Oluşturma.

    internal class MyServiceCredentialsSecurityTokenManager :
        ServiceCredentialsSecurityTokenManager
    {
        MyServiceCredentials credentials;
    
        public MyServiceCredentialsSecurityTokenManager(MyServiceCredentials credentials)
            : base(credentials)
        {
            this.credentials = credentials;
        }
    
        public override SecurityTokenProvider CreateSecurityTokenProvider(SecurityTokenRequirement tokenRequirement)
        {
            // Return your implementation of SecurityTokenProvider, if required.
            // This implementation delegates to the base class.
            return base.CreateSecurityTokenProvider(tokenRequirement);
        }
    
        public override SecurityTokenAuthenticator CreateSecurityTokenAuthenticator(SecurityTokenRequirement tokenRequirement, out SecurityTokenResolver outOfBandTokenResolver)
        {
            // Return your implementation of SecurityTokenProvider, if required.
            // This implementation delegates to the base class.
            return base.CreateSecurityTokenAuthenticator(tokenRequirement, out outOfBandTokenResolver);
        }
    
        public override SecurityTokenSerializer CreateSecurityTokenSerializer(SecurityTokenVersion version)
        {
            // Return your implementation of SecurityTokenProvider, if required.
            // This implementation delegates to the base class.
            return base.CreateSecurityTokenSerializer(version);
        }
    }
    
    Friend Class MyServiceCredentialsSecurityTokenManager
        Inherits ServiceCredentialsSecurityTokenManager
        Private credentials As MyServiceCredentials
    
        Public Sub New(ByVal credentials As MyServiceCredentials)
            MyBase.New(credentials)
            Me.credentials = credentials
    
        End Sub
    
    
        Public Overrides Function CreateSecurityTokenProvider(ByVal tokenRequirement As SecurityTokenRequirement) _
        As SecurityTokenProvider
            ' Return your implementation of SecurityTokenProvider, if required.
            ' This implementation delegates to the base class.
            Return MyBase.CreateSecurityTokenProvider(tokenRequirement)
    
        End Function
    
        Public Overrides Function CreateSecurityTokenAuthenticator( _
        ByVal tokenRequirement As SecurityTokenRequirement, _
        ByRef outOfBandTokenResolver As SecurityTokenResolver) _
        As SecurityTokenAuthenticator
            ' Return your implementation of SecurityTokenProvider, if required.
            ' This implementation delegates to the base class.
            Return MyBase.CreateSecurityTokenAuthenticator(tokenRequirement, outOfBandTokenResolver)
    
        End Function
    
    
        Public Overrides Function CreateSecurityTokenSerializer(ByVal version As SecurityTokenVersion) _
        As SecurityTokenSerializer
            ' Return your implementation of SecurityTokenProvider, if required.
            ' This implementation delegates to the base class.
            Return MyBase.CreateSecurityTokenSerializer(version)
    
        End Function
    End Class
    

Uygulama kodundan özel hizmet kimlik bilgilerini kullanmak için

  1. ServiceHost nesnesinin bir örneğini oluşturun.

  2. Sistem tarafından sağlanan hizmet kimlik bilgileri davranışını koleksiyondan Behaviors kaldırın.

  3. Özel hizmet kimlik bilgileri sınıfının yeni bir örneğini oluşturun ve koleksiyona Behaviors ekleyin.

    // Create a service host with a service type.
    ServiceHost serviceHost = new ServiceHost(typeof(Service));
    
    // Remove the default ServiceCredentials behavior.
    serviceHost.Description.Behaviors.Remove<ServiceCredentials>();
    
    // Add a custom service credentials instance to the collection.
    serviceHost.Description.Behaviors.Add(new MyServiceCredentials());
    
    ' Create a service host with a service type.
    Dim serviceHost As New ServiceHost(GetType(Service))
    
    ' Remove the default ServiceCredentials behavior.
    serviceHost.Description.Behaviors.Remove(Of ServiceCredentials)()
    
    ' Add a custom service credentials instance to the collection.
    serviceHost.Description.Behaviors.Add(New MyServiceCredentials())
    

"" veTo register and use a custom client credentials configuration handler in the application configuration "To create a configuration handler for custom client credentials. yordamlarında daha önce açıklanan adımları kullanarak yapılandırma desteği ekleyin. Tek fark, yapılandırma işleyicisi ServiceCredentialsElement için temel sınıf olarak sınıfı yerine ClientCredentialsElement sınıfını kullanmaktır. Özel hizmet kimlik bilgisi öğesi, sistem tarafından sağlanan <serviceCredentials> öğenin kullanıldığı her yerde kullanılabilir.

Ayrıca bkz.