Вы можете настроить OAuthValidation AccessTokenFormat на использование MachineKey DataProtectionProvider и DataProtector, которые будут защищать и снимать защиту с токенов вашего носителя.Вам нужно будет реализовать MachineKey DataProtector.Этот парень уже сделал это https://github.com/daixinkai/AspNetCore.Owin/blob/master/src/DataProtection/src/AspNetCore.DataProtection.MachineKey/MachineKeyDataProtectionProvider.cs.
public void ConfigureServices(IServiceCollection services){
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
ConfigureAuth(services);
string machineKey = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<machineKey decryption=""Auto"" decryptionKey =""DEC_KEY"" validation=""HMACSHA256"" validationKey=""VAL_KEY"" />";
var machineKeyConfig = new XmlMachineKeyConfig(machineKey);
MachineKeyDataProtectionOptions machinekeyOptions = new MachineKeyDataProtectionOptions();
machinekeyOptions.MachineKey = new MachineKey(machineKeyConfig);
MachineKeyDataProtectionProvider machineKeyDataProtectionProvider = new MachineKeyDataProtectionProvider(machinekeyOptions);
MachineKeyDataProtector machineKeyDataProtector = new MachineKeyDataProtector(machinekeyOptions.MachineKey);
//purposes from owin middleware
IDataProtector dataProtector =
machineKeyDataProtector.CreateProtector("Microsoft.Owin.Security.OAuth",
"Access_Token", "v1");
services.AddAuthentication(options =>
{
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddOAuthValidation(option=> {
option.AccessTokenFormat = new OwinTicketDataFormat(new OwinTicketSerializer(), dataProtector); })
Важно сохранить те же «цели» DataProtector, которые Оуэн использует в OAuthAuthorizationServerMiddleware, чтобы данные были правильно зашифрованы / расшифрованы.Это «Microsoft.Owin.Security.OAuth», «Access_Token» и «v1».(см. https://stackoverflow.com/a/29454816/2734166).
И, наконец, вам нужно будет перенести Owin TicketSerializer (и, возможно, также TicketFormat), поскольку тот, что в NetCore, немного отличается. Вы можете взять его отсюда:
https://github.com/aspnet/AspNetKatana/blob/e2b18ec84ceab7ffa29d80d89429c9988ab40144/src/Microsoft.Owin.Security/DataHandler/Serializer/TicketSerializer.cs
Я недавно заработал на этом. По сути, проверка подлинности с помощью API-интерфейса Owin .NET 4.5 и запуск API ресурсов в NET Core с использованием того же токена. Я попытаюсь поделиться кодом в github.как только я его почистил.
Насколько я знаю, не рекомендуется сохранять старый ключ защиты данных машинного ключа, но переходить на новый из NET Core. Иногда это невозможно.В случае, если у меня уже слишком много API, я пытаюсь использовать несколько новых API-интерфейсов NET Core для работы с устаревшими.