Получение 'JwtSecurityToken' не поддерживает создание 'SamlAssertionKeyIdentifierClause'.ошибка при создании канала с выданным токеном в WCF 4.5 - PullRequest
0 голосов
/ 28 мая 2018

При попытке создать пользовательский токен STS с помощью JwtSecurityToken получено следующее сообщение об ошибке:

System.NotSupportedException: «JwtSecurityToken» не поддерживает создание «SamlAssertionKeyIdentifierClause». *

Я использую .NET / WCF / WIF 4.5

JwtSecurityTokenHandler из

System.IdentityModel.Tokens.Jwt, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken= 31bf3856ad364e35

Любая помощь высоко ценится.

Трассировка стека выглядит следующим образом:

Трассировка стека сервера: в System.IdentityModel.Tokens.SecurityToken.CreateKeyIdentifierClauseT в System.ServiceModel.Security.Tokens.SecurityTokenParameters.CreateKuseternalElaserClayIuseXierIceierier(SecurityToken маркер, SecurityTokenReferenceStyle referenceStyle) в System.ServiceModel.Security.SendSecurityHeader.SignWithSupportingTokens () в System.ServiceModel.Security.SendSecurityHeader.CompleteSecurityApplication () в System.ServiceModel.Security.SecurityAppliedMessage.OnWriteMessage (XmlDictionaryWriter писатель) в System.ServiceModel.Channels.BufferedMessageWriter.WriteMessage (сообщение сообщение, BufferManager bufferManager, Int32 initialOffset, Int32 maxSizeQuota) на System.ServiceModel.Channels.TextMessageEncoderFactory.TextMessageEncoder.WriteMessage (сообщение сообщение, Int32 MaxMessageSize, BufferManager bufferManager, Int32 messageOffset) в System.ServiceModel.Channels.HttpOutput.SerializeBufferedMessage (Сообщсообщение, Boolean shouldRecycleBuffer) в System.ServiceModel.Channels.HttpOutput.Send (тайм-аут TimeSpan) в System.ServiceModel.Channels.HttpChannelFactory 1.HttpRequestChannel.HttpChannelRequest.SendRequest(Message message, TimeSpan timeout) at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout) at System.ServiceModel.Channels.SecurityChannelFactory 1.SecurityRequestChannel.Request (сообщение сообщения, TimeSpanServiceServiceService).RequestChannelBinder.Request (сообщение-сообщение, время ожидания TimeSpan) в System.ServiceModel.Channels.ServiceChannel.Call (строковое действие, логический односторонний метод, операция ProxyOperationRuntime, Object [] ins, Object [] outs, TimeSpan timeout) в System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (метод IMethodCallMessageCall, операция ProxyOperationRuntime) в System.ServiceModel.Channels.ServiceChannelProxy.Invoke (сообщение IMessage)

WS2007FederationHttpBinding ws2007FederationHttpBinding = CreateStsBinding();
        RequestSecurityToken request = new RequestSecurityToken
        {
            RequestType = RequestTypes.Issue,
            AppliesTo = new EndpointReference("appliestoURLGoeshere"),
            KeyType = KeyTypes.Symmetric,
            TokenType = "urn:ietf:params:oauth:token-type:jwt"
    };

        EndpointIdentity rpIdentity = new X509CertificateEndpointIdentity(new X509Certificate2(Convert.FromBase64String("base64CertificateValues")));
        WSTrustChannelFactory factory = new WSTrustChannelFactory(ws2007FederationHttpBinding, new EndpointAddress(new Uri("endpointUri"), rpIdentity))
        {
            TrustVersion = TrustVersion.WSTrust13
        };
        factory.Credentials.SupportInteractive = false;
        factory.Credentials.UseIdentityConfiguration = true;
        factory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
        factory.Credentials.ServiceCertificate.Authentication.RevocationMode = X509RevocationMode.NoCheck;
        IWSTrustChannelContract channel = factory.CreateChannelWithIssuedToken(myJwtIssuedToken);       
         //...............Receive error here............
         SecurityToken securityToken = channel.Issue(request);
        return securityToken;
...