неверная подпись - JWT должен иметь три сегмента - PullRequest
0 голосов
/ 30 апреля 2020

Я использую OAuthAuthorizationServerProvider от Microsoft 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 должен иметь три сегмента

Что здесь не так? Пожалуйста, предложите.

enter image description here

enter image description here

1 Ответ

1 голос
/ 30 апреля 2020

Чтобы токен JWT был действительным, вы должны иметь три сегмента, как указано в сообщении об ошибке.

Согласно документации:

В компактном виде JSON Веб-токены состоят из трех частей, разделенных точками (.):

  • Заголовок
  • Полезная нагрузка
  • Подпись

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

xxxxx.yyyyy.zzzzz

Необходимо проверить код своего пользовательского поставщика, чтобы убедиться, что эти три сегмента действительно присутствуют. Они должны быть разделены точкой.

...