Ответ 1
Взглянув на Katana исходный код контекста запуска OWIN, вы можете увидеть реализация по умолчанию DataProtectionProvider
- это MachineKeyDataProtectionProvider
. К сожалению, этот класс не доступен для нас, только DpapiDataProtectionProvider
, который не будет работать, когда размещен в лазурном виде..
Здесь вы можете найти реализацию MachineKeyDataProtectionProvider
. Вам также нужно будет реализовать свой собственный MachineKeyDataProtector
, как показано здесь. Это не сложное внедрение и по существу обертывание вокруг MachineKey.Protect()
и MachineKey.Unprotect()
.
Реализация для MachineKeyDataProtectionProvider
и MachineKeyDataProtector
из источника проекта Katana (apache 2.0 license):
internal class MachineKeyProtectionProvider : IDataProtectionProvider
{
public IDataProtector Create(params string[] purposes)
{
return new MachineKeyDataProtector(purposes);
}
}
internal class MachineKeyDataProtector : IDataProtector
{
private readonly string[] _purposes;
public MachineKeyDataProtector(string[] purposes)
{
_purposes = purposes;
}
public byte[] Protect(byte[] userData)
{
return MachineKey.Protect(userData, _purposes);
}
public byte[] Unprotect(byte[] protectedData)
{
return MachineKey.Unprotect(protectedData, _purposes);
}
}
После того, как вы внедрили это, легко подключиться к UserManager
:
var usermanager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>());
var machineKeyProtectionProvider = new MachineKeyProtectionProvider();
usermanager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(machineKeyProtectionProvider.Create("ASP.NET Identity"));
Надеюсь, что это поможет вам в правильном направлении.