BearerOption.SaveToken не сохраняет токен на сервере - PullRequest
0 голосов
/ 17 марта 2020

Я использую. net Базовую платформу Core Web API 3.1.2 и в конфигурации я добавил следующий код:

            services.AddAuthentication(opt =>
            {
                opt.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                opt.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            }).
            AddJwtBearer(opt =>
            {
                **opt.SaveToken = true;**
                opt.TokenValidationParameters = new TokenValidationParameters()
                {
                    IssuerSigningKey = new SymmetricSecurityKey(_jwtSigningKey),
                    ValidateAudience = false,
                    ValidateIssuer = false,
                    ValidateLifetime = true,
                    ValidateIssuerSigningKey = true,
                };
            });

Логически, opt.SaveToken = true сохранит токен на сервере, а метод аутентификации не должен принимать токен, выданный с любого другого сервера, даже если другой сервер использует точно такой же ключ подписи JWT, поскольку он не сохранен на сервере.

Я сделал тест и загрузил один и тот же ключ подписи на 2 разных сервера и получил токен входа с одного сервера и использовал его для аутентификации на другом сервере, а другой сервер принял токен, даже если токен не был сохранен Более того, я случайно добавил случайное уникальное сгенерированное значение строки, которое будет включено в токен, поэтому нет никакого способа, чтобы 2 токена могли быть идентичными.

Почему это происходит? Что мне здесь не хватает?

1 Ответ

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

Я дважды проверил исходный код: https://github.com/aspnet/Security/blob/d1ee5a22fbda54fc2352d937d7064b451a95b72a/src/Microsoft.AspNetCore.Authentication.JwtBearer/JwtBearerHandler.cs

Официальный справочник: https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.authentication.jwtbearer.jwtbeareroptions.savetoken?view=aspnetcore-3.0

Set SaveToken = только true означает, что вы можете получить к нему доступ через await HttpContext.GetTokenAsyn c ("access_token") для любого исходящего запроса. Нет соединений с аутентификацией, но можно легко реализовать самостоятельно.

...