0

我正在使用OAuthAuthorizationServerProviderMicrosoft Owin Security,这是我正在使用的代码,

 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 需要有三个段

这里有什么问题?请建议。

在此处输入图像描述

在此处输入图像描述

4

1 回答 1

1

要使 JWT 令牌有效,您必须拥有三个段,如您的错误消息所述。

根据文档:

在其紧凑的形式中,JSON Web Tokens 由三部分组成,由点 (.) 分隔,它们是:

  • 标题
  • 有效载荷
  • 签名

因此,JWT 通常如下所示。

xxxxx.yyyyy.zzzzz

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

于 2020-04-30T06:01:37.317 回答