【问题标题】:Sending jwt token to wif wcf service将 jwt 令牌发送到 wif wcf 服务
【发布时间】:2015-02-10 02:45:24
【问题描述】:

我在向 wcf 服务发送 jwt 令牌时遇到问题。

按照这个,它几乎可以工作。 Delivering a JWT SecurityToken to a WCF client

所以我在上面的链接中发送了一个 GenericXmlSecurityToken。 并创建了以下处理程序:

public class CustomJwtSecurityTokenHandler : JwtSecurityTokenHandler
{
    public override ReadOnlyCollection<ClaimsIdentity> ValidateToken(SecurityToken token)
    {
        var jwtToken = (JwtSecurityToken)(token);
        SecurityToken securityToken;
        var principal = ValidateToken(jwtToken.RawData, new TokenValidationParameters(), out securityToken);
        var collection = new ReadOnlyCollection<ClaimsIdentity>(principal.Identities.ToList());
        return collection;
    }

    public override ClaimsPrincipal ValidateToken(string jwt, TokenValidationParameters validationParameters, out SecurityToken token)
    {
        validationParameters.ValidateAudience = false;
        validationParameters.ValidateIssuer = false;

        var certificateBytes = Convert.FromBase64String("long text...");

        validationParameters.IssuerSigningKey = new X509SecurityKey(new X509Certificate2(certificateBytes));

        return base.ValidateToken(jwt, validationParameters, out token);
    }
}

到目前为止,令牌验证一切正常,但在此之后发生了一些事情。

服务器抛出

System.ServiceModel.Security.MessageSecurityException : Message security verification failed. System.IndexOutOfRangeException: The index was outside the bounds of the array.

内部异常的StackTrace

<StackTrace>
   at System.Xml.XmlBufferReader.GetChars(Int32 offset, Int32 length, Char[] chars)
   at System.Xml.XmlBufferReader.GetString(Int32 offset, Int32 length)
   at System.Xml.StringHandle.GetString()
   at System.Xml.XmlBaseReader.ReadEndElement()
   at System.ServiceModel.Security.ReceiveSecurityHeader.ExecuteFullPass(XmlDictionaryReader reader)
   at System.ServiceModel.Security.ReceiveSecurityHeader.Process(TimeSpan timeout, ChannelBinding channelBinding, ExtendedProtectionPolicy extendedProtectionPolicy)
   at System.ServiceModel.Security.TransportSecurityProtocol.VerifyIncomingMessageCore(Message&amp; message, TimeSpan timeout)
   at System.ServiceModel.Security.TransportSecurityProtocol.VerifyIncomingMessage(Message&amp; message, TimeSpan timeout)
</StackTrace>

【问题讨论】:

  • 您有没有发现导致错误的原因?我遇到了完全相同的问题。
  • 不,我不知道:(
  • 嗨。由于这个问题,我变成了秃头。你有没有找到解决办法?

标签: wcf wif jwt


【解决方案1】:

这可能是 WCF 中的一个问题。

见:How to use JWT tokens with WCF and WIF?

一种潜在的解决方法可能是将 JWT 作为 GenericXmlSecurityToken 中的声明传输,正如 http://leastprivilege.com/2015/07/02/give-your-wcf-security-architecture-a-makeover-with-identityserver3/ 所建议的那样

【讨论】:

    猜你喜欢
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 2017-11-08
    • 2011-11-20
    • 2019-01-06
    • 2023-03-27
    • 2011-07-12
    相关资源
    最近更新 更多