无效签名-JWT必须分为三个部分

时间:2020-04-30 04:36:54

标签: c# owin-security

我正在使用Microsoft Owin Security的OAuthAuthorizationServerProvider,这里是我在使用代码,

 var oAuthAuthorizationServerOptions = new OAuthAuthorizationServerOptions()
        {
            TokenEndpointPath = new Microsoft.Owin.PathString("/token"), 
            AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(5),
            AllowInsecureHttp = true,
            Provider = new CustomOAuthProvider()
        };

CustomOAuthProvider,

  public class CustomOAuthProvider : OAuthAuthorizationServerProvider
{
    public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
    {
        var lstClients = ClientService.GetClients();

        if (lstClients.Count <= 0) return base.ValidateClientAuthentication(context);

        context.TryGetFormCredentials(out var clientId, out var clientSecret);

        if (lstClients.Count(c => c.ClientId == clientId) > 0
            && lstClients.Count(c => c.ClientPassword == clientSecret) > 0)
        {
            context.Validated(clientId);
        }

        return base.ValidateClientAuthentication(context);
    }

    public override Task GrantClientCredentials(OAuthGrantClientCredentialsContext context)
    {
        var claimsIdentity = new ClaimsIdentity(context.Options.AuthenticationType);
        claimsIdentity.AddClaim(new Claim(ClaimTypes.Name, context.ClientId));
        var props = new AuthenticationProperties(new Dictionary<string, string>
        {
            { "client_id", context.ClientId },
            { "scope", string.Join(" ",context.Scope) }
        });
        var ticket = new AuthenticationTicket(claimsIdentity, props);
        context.Validated(ticket);
        return base.GrantClientCredentials(context);
    }
}

我在这里尝试添加scope,但是看起来这不是正确的添加方式,即使所有看起来都不错并且可以正常工作,当我尝试查看令牌时,

  • jwt.IO中,我看到无效的签名错误。
  • calebb.net中,这是说-JWT必须包含三个细分

这是怎么了?请提出建议。

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

要使JWT令牌有效,您必须按照错误消息所述将其分为三个部分。

根据文档:

JSON Web令牌以紧凑的形式由三部分组成 按点(。),即:

  • 标题
  • 有效载荷
  • 签名

因此,JWT通常看起来像 正在关注。

xxxxx.yyyyy.zzzzz

您必须检查自定义提供程序的代码,以确保确实存在这三个段。它们必须用点分隔。