Предупреждение Microsoft.Owin.Security.OAuth.OAuthBearerAuthenticationMiddleware: 0: получен неверный токен носителя - PullRequest
0 голосов
/ 22 февраля 2019

Я получаю это предупреждение каждый раз, когда пользователь пытается получить доступ к защищенной конечной точке API.Аутентификация работает нормально, и пользователь, похоже, проходит аутентификацию, но я не смог понять, почему эта ошибка продолжает происходить.Я запускаю это на локальном сервере разработки без включенного https / ssl .Я мог бы пропустить шаг не совсем уверен здесь.Я реализовал аутентификацию токенов, а также обновил токены с помощью пользовательских провайдеров.Затем реализовал пользовательский формат jwt для генерации токенов.

Это предупреждение в журнале вывода приложений:

Microsoft.Owin.Security.OAuth.OAuthBearerAuthenticationMiddleware Предупреждение: 0: недействительнополученный токен на предъявителя

SimpleJWTFormat.cs : указывает формат для токена jwt

public class SimpleJwtFormat : ISecureDataFormat<AuthenticationTicket>
{

    private readonly string _issuer = string.Empty;

    public SimpleJwtFormat(string issuer)
    {
        _issuer = issuer;
    }

    public string Protect(AuthenticationTicket data)
    {
        if (data == null)
        {
            throw new ArgumentNullException("data");
        }

        string audienceId = ConfigurationManager.AppSettings["as:AudienceId"];

        string symmetricKeyAsBase64 = ConfigurationManager.AppSettings["as:AudienceSecret"];
        var keyByteArray = TextEncodings.Base64Url.Decode(symmetricKeyAsBase64);

        //var signingKey = new HmacSigningCredentials(keyByteArray);
        var securityKey = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(keyByteArray);
        securityKey.KeyId = ConfigurationManager.AppSettings["as:AudienceId"];

        var signingCredentials = new Microsoft.IdentityModel.Tokens.SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);

        var issued = data.Properties.IssuedUtc;

        var expires = data.Properties.ExpiresUtc;

        var token = new JwtSecurityToken(_issuer, audienceId, data.Identity.Claims, issued.Value.UtcDateTime, expires.Value.UtcDateTime, signingCredentials);
        //token.SigningKey = securityKey;

        var handler = new JwtSecurityTokenHandler();

        var jwt = handler.WriteToken(token);
        return jwt;
    }

    public AuthenticationTicket Unprotect(string protectedText)
    {
        string symmetricKeyAsBase64 = ConfigurationManager.AppSettings["as:AudienceSecret"];
        string audienceId = ConfigurationManager.AppSettings["as:AudienceId"];

        var keyByteArray = TextEncodings.Base64Url.Decode(symmetricKeyAsBase64);
        var signingKey = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(keyByteArray); 

        var tokenValidationParameters = new TokenValidationParameters
        {
            ValidAudience = audienceId,
            ValidIssuer = _issuer,
            IssuerSigningKey = signingKey,
            ValidateLifetime = true,
            ValidateAudience = true,
            ValidateIssuer = true,
            RequireSignedTokens = true,
            RequireExpirationTime = true,
            ValidateIssuerSigningKey = true
        };


        var handler = new JwtSecurityTokenHandler();
        SecurityToken token = null;

        // Unpack token
        var pt = handler.ReadToken(protectedText);
        string t = ((JwtSecurityToken)pt).RawData;

        var principal = handler.ValidateToken(t, tokenValidationParameters, out token);
        var identity = principal.Identities;

        return new AuthenticationTicket(identity.First(), new AuthenticationProperties());
    }
}

1 Ответ

0 голосов
/ 23 февраля 2019

Проблема была в том, что я не вызвал app.UseOAuthBearerAuthentication в файле Startup.cs и указал собственный формат токена.

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
{
  AccessTokenFormat = _tokenFormat
});
...