Токен аутентификации всегда возвращается неавторизованным - PullRequest
1 голос
/ 11 апреля 2020

В настоящее время я пытаюсь использовать токен на предъявителя, и независимо от того, что я делаю, я получаю неавторизованную ошибку HTTP 401.

Я следую руководству по внедрению JWT, которое у меня есть метод расширения, который обрабатывает JWT.

public static class AuthenticationExtension 
{
    public static IServiceCollection AddTokenAuthentication(this IServiceCollection services, IConfiguration config) 
    {
        var secret = config.GetSection("JwtConfig").GetSection("secret").Value;

        var key = Encoding.ASCII.GetBytes(secret);

        services.AddAuthentication(x =>
            {
                x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(x =>
            {
                x.TokenValidationParameters = new TokenValidationParameters
                {
                    IssuerSigningKey = new SymmetricSecurityKey(key),
                    ValidateIssuer = false, 
                    ValidateAudience = false,
                    // ValidIssuer = "localhost",
                    //ValidAudience = "localhost"
                };
        });

        return services;
    }
}

Кроме того, вот как контроллер токена генерирует токен. Я должен получать значения из заголовка вместо электронной почты и пароля, например.

Поскольку этот код можно заменить, если он найден в коде, он не может этого сделать.

var  token = jwt.GenerateSecurityToken("fake@email.com"); 

В моем StartUp.cs у меня просто есть следующее, чтобы добавить промежуточное ПО в мою конфигурацию. В разделе услуг я провожу тест

  services.AddTokenAuthentication(Configuration);

Но, как вы видите, я получаю неавторизованный HTTP 401.

enter image description here

Это это код из API / маркера контроллера.

[Route("api/[controller]")]
[ApiController]
public class TokenController : ControllerBase
{
    private IConfiguration _config;

    public TokenController(IConfiguration config)
    {
        _config = config;
    }

    [HttpGet]
    public string GetRandomToken()
    {
        var jwt = new JwtService(_config);
        var token = jwt.GenerateSecurityToken("fake@email.com");
        return token;
    }
}

токен из апи / лексема

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImZha2VAZW1haWwuY29tIiwibmJmIjoxNTg2NjMzMTkwLCJleHAiOjE1ODY3MTk1OTAsImlhdCI6MTU4NjYzMzE5MH0.SPSErcPpD4f48sWFYQFVUBmTaVtCW8oDw4Np6Tncozo

Это мой appSettings.json config Я, конечно, изменю свой секрет, как только получу эту настройку.

Достаточно ли этого для защиты API или вы также должны использовать идентификатор клиента и секрет с точки зрения API-уровня. Стиль HMA C.

"JwtConfig": {
    "secret": "PDv7DrqznYL6nv7DrqzjnQYO9JxIsWdcjnQYL6nu0f",
    "expirationInMinutes": 1440   
},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...