다음을 통해 공유


ServiceCredentialsSecurityTokenManager.CreateSecurityTokenProvider 메서드

정의

SecurityTokenRequirement를 기반으로 보안 토큰 공급자를 만듭니다.

public:
 override System::IdentityModel::Selectors::SecurityTokenProvider ^ CreateSecurityTokenProvider(System::IdentityModel::Selectors::SecurityTokenRequirement ^ requirement);
public override System.IdentityModel.Selectors.SecurityTokenProvider CreateSecurityTokenProvider (System.IdentityModel.Selectors.SecurityTokenRequirement requirement);
override this.CreateSecurityTokenProvider : System.IdentityModel.Selectors.SecurityTokenRequirement -> System.IdentityModel.Selectors.SecurityTokenProvider
Public Overrides Function CreateSecurityTokenProvider (requirement As SecurityTokenRequirement) As SecurityTokenProvider

매개 변수

requirement
SecurityTokenRequirement

보안 토큰 요구 사항입니다.

반환

SecurityTokenProvider

보안 토큰 공급자입니다.

예외

requirement이(가) null인 경우

전달된 requirement에 대한 보안 토큰 공급자를 만들 수 없는 경우

예제

다음 코드에서는 이 메서드를 재정의하는 방법을 보여 줍니다.

internal class MyServiceCredentialsSecurityTokenManager :
    ServiceCredentialsSecurityTokenManager
{
    MyServiceCredentials credentials;

    public MyServiceCredentialsSecurityTokenManager(
        MyServiceCredentials credentials)
        : base(credentials)
    {
        this.credentials = credentials;
    }

    public override SecurityTokenProvider CreateSecurityTokenProvider(
        SecurityTokenRequirement requirement)
    {
        SecurityTokenProvider result = null;
        if (requirement.TokenType == SecurityTokenTypes.X509Certificate)
        {
            MessageDirection direction = requirement.
                GetProperty<MessageDirection>(
                ServiceModelSecurityTokenRequirement.
                MessageDirectionProperty);
            if (direction == MessageDirection.Input)
            {
                if (requirement.KeyUsage == SecurityKeyUsage.Exchange)
                {
                    result = new X509SecurityTokenProvider(
                        credentials.ServiceEncryptingCertificate);
                }
                else
                {
                    result = new X509SecurityTokenProvider(
                        credentials.ClientSigningCertificate);
                }
            }
            else
            {
                if (requirement.KeyUsage == SecurityKeyUsage.Signature)
                {
                    result = new X509SecurityTokenProvider(
                        credentials.ServiceSigningCertificate);
                }
                else
                {
                    result = new X509SecurityTokenProvider(
                        credentials.ClientEncryptingCertificate);
                }
            }
        }
        else
        {
            result = base.CreateSecurityTokenProvider(requirement);
        }
        return result;
    }
}
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 requirement As SecurityTokenRequirement) As SecurityTokenProvider
        Dim result As SecurityTokenProvider = Nothing
        If requirement.TokenType = SecurityTokenTypes.X509Certificate Then
            Dim direction As MessageDirection = requirement. GetProperty(Of MessageDirection)(ServiceModelSecurityTokenRequirement. MessageDirectionProperty)
            If direction = MessageDirection.Input Then
                If requirement.KeyUsage = SecurityKeyUsage.Exchange Then
                    result = New X509SecurityTokenProvider(credentials.ServiceEncryptingCertificate)
                Else
                    result = New X509SecurityTokenProvider(credentials.ClientSigningCertificate)
                End If
            Else
                If requirement.KeyUsage = SecurityKeyUsage.Signature Then
                    result = New X509SecurityTokenProvider(credentials.ServiceSigningCertificate)
                Else
                    result = New X509SecurityTokenProvider(credentials.ClientEncryptingCertificate)
                End If
            End If
        Else
            result = MyBase.CreateSecurityTokenProvider(requirement)
        End If
        Return result
    End Function
End Class

설명

SecurityTokenProvider 클래스는 지정된 ServiceModelSecurityTokenRequirement에 맞는 토큰을 가져옵니다. 필요한 경우 토큰 공급자는 토큰 갱신과 취소도 지원할 수 있습니다. 토큰 공급자는 구성에 따라 토큰을 캐시할 수 있습니다.

적용 대상