Megosztás a következőn keresztül:


Útmutató: Egyéni ügyfél- és szolgáltatás hitelesítő adatok létrehozása

Ez a témakör bemutatja, hogyan implementálhat egyéni ügyfél- és szolgáltatás-hitelesítő adatokat, és hogyan használhat egyéni hitelesítő adatokat az alkalmazáskódból.

Hitelesítő adatok bővíthetőségi osztályai

A ClientCredentials Windows Communication Foundation (WCF) biztonsági bővíthetőségének fő belépési pontjai és ServiceCredentials osztályai. Ezek a hitelesítőadat-osztályok biztosítják azokat az API-kat, amelyek lehetővé teszik az alkalmazáskód számára a hitelesítő adatok beállítását és a hitelesítő adatok típusainak biztonsági jogkivonatokká való átalakítását. (A biztonsági jogkivonatok a SOAP-üzeneteken belüli hitelesítő adatok továbbítására szolgáló űrlapok.) A hitelesítő adatok osztályainak feladatai két területre oszthatók:

  • Adja meg az alkalmazások API-jait a hitelesítő adatok beállításához.

  • Az implementációkhoz SecurityTokenManager gyárként kell elvégeznie.

A WCF-ben megadott alapértelmezett implementációk támogatják a rendszer által biztosított hitelesítőadat-típusokat, és létrehoznak egy biztonsági jogkivonat-kezelőt, amely képes kezelni ezeket a hitelesítő adatokat.

A testreszabás okai

Az ügyfél- vagy szolgáltatás hitelesítőadat-osztályok testreszabásának több oka is van. Elsősorban az a követelmény, hogy módosítsa az alapértelmezett WCF biztonsági viselkedést a rendszer által biztosított hitelesítő adatok típusainak kezelése tekintetében, különösen a következő okok miatt:

  • Más bővíthetőségi pontok használatával nem lehetséges módosítások.

  • Új hitelesítőadat-típusok hozzáadása.

  • Új egyéni biztonsági jogkivonattípusok hozzáadása.

Ez a témakör bemutatja, hogyan implementálhat egyéni ügyfél- és szolgáltatás-hitelesítő adatokat, és hogyan használhatja őket alkalmazáskódból.

Sorozat első eleme

Az egyéni hitelesítő adatok osztályának létrehozása csak az első lépés, mivel a hitelesítő adatok testreszabásának oka a WCF viselkedésének módosítása a hitelesítő adatok kiépítésével, a biztonsági jogkivonat szerializálásával vagy hitelesítésével kapcsolatban. A szakasz további témakörei ismertetik, hogyan hozhat létre egyéni szerializálókat és hitelesítőket. Ebben a tekintetben az egyéni hitelesítő adatok osztályának létrehozása a sorozat első témaköre. Az ezt követő műveletek (egyéni szerializálók és hitelesítő adatok létrehozása) csak egyéni hitelesítő adatok létrehozása után végezhetők el. A témakörre épülő további témakörök a következők:

Eljárások

Egyéni ügyfél hitelesítő adatainak implementálása

  1. Definiáljon egy új osztályt, amely az ClientCredentials osztályból származik.

  2. Opcionális. Adjon hozzá új metódusokat vagy tulajdonságokat az új hitelesítő adatokhoz. Ha nem ad hozzá új hitelesítő adatokat, hagyja ki ezt a lépést. Az alábbi példa egy tulajdonságot CreditCardNumber ad hozzá.

  3. Bírálja felül a metódust CreateSecurityTokenManager . Ezt a metódust a WCF biztonsági infrastruktúrája automatikusan meghívja az egyéni ügyfél hitelesítő adatainak használatakor. Ez a módszer felelős az osztály implementációjának egy példányának létrehozásáért és visszaadásáért SecurityTokenManager .

    Fontos

    Fontos megjegyezni, hogy a CreateSecurityTokenManager metódus felülbírált egy egyéni biztonsági jogkivonat-kezelő létrehozásához. A biztonsági jogkivonat-kezelőnek ClientCredentialsSecurityTokenManagera tényleges biztonsági jogkivonat létrehozásához egy egyéni biztonsági jogkivonat-szolgáltatót kell visszaadnia, amelyből SecurityTokenProviderszármazik. Ha nem követi ezt a mintát a biztonsági jogkivonatok létrehozásához, előfordulhat, hogy az alkalmazás helytelenül ChannelFactory működik az objektumok gyorsítótárazásakor (ez a WCF-ügyfélproxyk alapértelmezett viselkedése), ami a jogosultsági támadások emelkedését eredményezheti. Az egyéni hitelesítőadat-objektum a gyorsítótárazás részeként lesz gyorsítótárazva.ChannelFactory Az egyéni beállítások SecurityTokenManager azonban minden meghíváskor létrejönnek, ami csökkenti a biztonsági fenyegetést, amíg a jogkivonat-létrehozási logika a SecurityTokenManager.

  4. Bírálja felül a metódust CloneCore .

    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
    

Egyéni ügyfélbiztonsági jogkivonat-kezelő implementálása

  1. Adjon meg egy új osztályt, amelyből származik ClientCredentialsSecurityTokenManager.

  2. Opcionális. Bírálja felül a CreateSecurityTokenProvider(SecurityTokenRequirement) metódust, ha egyéni SecurityTokenProvider implementációt kell létrehoznia. Az egyéni biztonsági jogkivonat-szolgáltatókkal kapcsolatos további információkért lásd : Egyéni biztonsági jogkivonat-szolgáltató létrehozása.

  3. Opcionális. Bírálja felül a CreateSecurityTokenAuthenticator(SecurityTokenRequirement, SecurityTokenResolver) metódust, ha egyéni SecurityTokenAuthenticator implementációt kell létrehoznia. Az egyéni biztonsági jogkivonat-hitelesítőkkel kapcsolatos további információkért lásd : Egyéni biztonsági jogkivonat-hitelesítő létrehozása.

  4. Opcionális. Felülbírálja a CreateSecurityTokenSerializer metódust, ha egyénit SecurityTokenSerializer kell létrehoznia. További információ az egyéni biztonsági jogkivonatokról és az egyéni biztonsági jogkivonat szerializálóiról: Egyéni jogkivonat létrehozása.

    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
    

Egyéni ügyfél hitelesítő adatainak használata az alkalmazáskódból

  1. Hozzon létre egy példányt a létrehozott ügyfélről, amely a szolgáltatási felületet jelöli, vagy hozzon létre egy példányt, amely egy ChannelFactory olyan szolgáltatásra mutat, amellyel kommunikálni szeretne.

  2. Távolítsa el a rendszer által biztosított ügyfél-hitelesítő adatok viselkedését a Behaviors gyűjteményből, amely a Endpoint tulajdonságon keresztül érhető el.

  3. Hozzon létre egy új példányt egy egyéni ügyfél hitelesítőadat-osztályához, és adja hozzá a Behaviors gyűjteményhez, amely a Endpoint tulajdonságon keresztül érhető el.

    // 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())
    

Az előző eljárás bemutatja, hogyan használhatja az ügyfél hitelesítő adatait az alkalmazáskódból. A WCF hitelesítő adatai az alkalmazáskonfigurációs fájllal is konfigurálhatók. Az alkalmazáskonfiguráció használata gyakran előnyösebb a kemény kódoláshoz, mivel lehetővé teszi az alkalmazásparaméterek módosítását anélkül, hogy módosítania kellene a forrást, újrafordítást és újratelepítést.

A következő eljárás azt ismerteti, hogyan lehet támogatást nyújtani az egyéni hitelesítő adatok konfigurálásához.

Konfigurációkezelő létrehozása egyéni ügyfél hitelesítő adataihoz

  1. Adjon meg egy új osztályt, amelyből származik ClientCredentialsElement.

  2. Opcionális. Adjon hozzá tulajdonságokat az alkalmazáskonfiguráción keresztül elérhetővé tenni kívánt összes további konfigurációs paraméterhez. Az alábbi példa egy nevű CreditCardNumbertulajdonságot ad hozzá.

  3. BehaviorType A tulajdonság felülbírálása a konfigurációelemhez létrehozott egyéni ügyfél-hitelesítőadat-osztály típusának visszaadásához.

  4. Bírálja felül a metódust CreateBehavior . A metódus feladata az egyéni hitelesítőadat-osztály egy példányának létrehozása és visszaadása a konfigurációs fájlból betöltött beállítások alapján. Hívja meg az alapmetódust ApplyConfiguration(ClientCredentials) ebből a metódusból, hogy lekérje az egyéni ügyfél hitelesítő adatainak példányába betöltött rendszer által biztosított hitelesítőadat-beállításokat.

  5. Opcionális. Ha a 2. lépésben további tulajdonságokat adott hozzá, felül kell bírálnia a Properties tulajdonságot, hogy regisztrálhassa a konfigurációs keretrendszer további konfigurációs beállításait, hogy felismerje őket. Egyesítse a tulajdonságokat az alaposztály tulajdonságaival, hogy a rendszer által megadott beállítások konfigurálhatók legyenek ezen az egyéni ügyfél-hitelesítő adatok konfigurációs elemén keresztül.

    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
    

Miután megkapta a konfigurációkezelő osztályt, az integrálható a WCF konfigurációs keretrendszerbe. Ez lehetővé teszi az egyéni ügyfél hitelesítő adatainak használatát az ügyfélvégpont viselkedési elemeiben, ahogyan az a következő eljárásban is látható.

Egyéni ügyfél-hitelesítő adatok konfigurációkezelőjének regisztrálása és használata az alkalmazáskonfigurációban

  1. Adjon hozzá egy <extensions> elemet és egy <behaviorExtensions> elemet a konfigurációs fájlhoz.

  2. Adjon hozzá egy <add> elemet az <behaviorExtensions> elemhez, és állítsa az name attribútumot egy megfelelő értékre.

  3. Állítsa be az type attribútumot a teljes típusnévre. A szerelvény nevét és más szerelvényattribútumokat is tartalmazza.

    <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. A konfigurációkezelő regisztrálása után az egyéni hitelesítő adatok elem a rendszer által biztosított <clientCredentials> elem helyett ugyanabban a konfigurációs fájlban használható. A rendszer által biztosított tulajdonságokat és a konfigurációkezelő implementációjához hozzáadott új tulajdonságokat is használhatja. Az alábbi példa egy egyéni tulajdonság értékét állítja be az creditCardNumber attribútum használatával.

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

Egyéni szolgáltatás hitelesítő adatainak megvalósítása

  1. Adjon meg egy új osztályt, amelyből származik ServiceCredentials.

  2. Opcionális. Adjon hozzá új tulajdonságokat, hogy API-kat biztosítson a hozzáadott új hitelesítő adatokhoz. Ha nem ad hozzá új hitelesítő adatokat, hagyja ki ezt a lépést. Az alábbi példa egy tulajdonságot AdditionalCertificate ad hozzá.

  3. Bírálja felül a metódust CreateSecurityTokenManager . Ezt a metódust a WCF-infrastruktúra automatikusan meghívja az egyéni ügyfél hitelesítő adatainak használatakor. A metódus feladata az osztály implementációjának egy példányának SecurityTokenManager létrehozása és visszaadása (a következő eljárásban leírtak szerint).

  4. Opcionális. Bírálja felül a metódust CloneCore . Ez csak akkor szükséges, ha új tulajdonságokat vagy belső mezőket ad hozzá az egyéni ügyfél hitelesítő adatainak implementálásához.

    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
    

Egyéni szolgáltatásbiztonsági jogkivonat-kezelő implementálása

  1. Definiáljon egy új osztályt, amely az ServiceCredentialsSecurityTokenManager osztályból származik.

  2. Opcionális. Bírálja felül a CreateSecurityTokenProvider metódust, ha egyéni SecurityTokenProvider implementációt kell létrehoznia. Az egyéni biztonsági jogkivonat-szolgáltatókkal kapcsolatos további információkért lásd : Egyéni biztonsági jogkivonat-szolgáltató létrehozása.

  3. Opcionális. Bírálja felül a CreateSecurityTokenAuthenticator metódust, ha egyéni SecurityTokenAuthenticator implementációt kell létrehoznia. További információ az egyéni biztonsági jogkivonat-hitelesítőkről : Útmutató: Egyéni biztonsági jogkivonat-hitelesítő létrehozása témakör.

  4. Opcionális. Felülbírálja a CreateSecurityTokenSerializer(SecurityTokenVersion) metódust, ha egyénit SecurityTokenSerializer kell létrehoznia. További információ az egyéni biztonsági jogkivonatokról és az egyéni biztonsági jogkivonat szerializálóiról: Egyéni jogkivonat létrehozása.

    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
    

Egyéni szolgáltatás hitelesítő adatainak használata az alkalmazáskódból

  1. Hozza létre a ServiceHost egy példányát.

  2. Távolítsa el a rendszer által biztosított szolgáltatás hitelesítő adatainak viselkedését a Behaviors gyűjteményből.

  3. Hozzon létre egy új példányt az egyéni szolgáltatás hitelesítő adatai osztályból, és adja hozzá a Behaviors gyűjteményhez.

    // 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())
    

Adja hozzá a konfiguráció támogatását az "" ésTo register and use a custom client credentials configuration handler in the application configuration "To create a configuration handler for custom client credentials" eljárásokban korábban ismertetett lépések használatával. Az egyetlen különbség az osztály használata az ServiceCredentialsElement osztály helyett a ClientCredentialsElement konfigurációkezelő alaposztályaként. Az egyéni szolgáltatás hitelesítő eleme ezután bárhol használható, ahol a rendszer által biztosított <serviceCredentials> elemet használja.

Lásd még