Я пытаюсь использовать собственную реализацию IDataProtector в приложении ASP. NET MVC. Я написал очень простую реализацию:
internal class AsymDataProtector : IDataProtector
{
public AsymDataProtector(string appName, string[] purposes)
{
}
public byte[] Protect(byte[] userData)
{
return CryptographyHelper.Encrypt(userData);
}
public byte[] Unprotect(byte[] protectedData)
{
return CryptographyHelper.Decrypt(protectedData);
}
}
public class AsymDataProtectionProvider : IDataProtectionProvider
{
private readonly string _appName;
public AsymDataProtectionProvider() : this(Guid.NewGuid().ToString())
{
}
public AsymDataProtectionProvider(string appName)
{
if (appName == null)
{
throw new ArgumentNullException("appName");
}
_appName = appName;
}
public IDataProtector Create(params string[] purposes)
{
if (purposes == null)
{
throw new ArgumentNullException("purposes");
}
return new AsymDataProtector(_appName, purposes);
}
}
Я регистрирую его с моим ApplicationUserManager.Create()
следующим образом:
manager.UserTokenProvider =
new DataProtectorTokenProvider<ApplicationUser>(new AsymDataProtectionProvider().Create("ASP.NET Identity"));
Однако ни мои Encrypt()
, ни Decrypt()
не являются
Я думаю, что пропускаю шаг, чтобы зарегистрировать мою реализацию IDataProtector
, но ничего не нашел. Как вы используете пользовательский IDataProtector
вместо DpapiDataProtector
?