gpt4 book ai didi

azure - 如何在 Azure Web 作业中实例化 OWIN IDataProtectionProvider?

转载 作者:行者123 更新时间:2023-12-02 11:07:01 25 4
gpt4 key购买 nike

我需要 IDataProtectionProvider 的实例使用身份框架生成电子邮件确认 token UserManager在 Azure Web 作业工作线程中:

var confirmToken = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);

这会崩溃,因为 IUserTokenProvider<User, int> 为空已传递至UserManager<User, int> build 完成后。

在 MVC 应用程序中,实例的创建如下:

public class OWINStartup
{
public void Configuration(IAppBuilder app)
{
var dataProtectionProvider = app.GetDataProtectionProvider();

但是,当然,Azure Web Jobs 没有 OWINStartup钩。有什么建议吗?

最佳答案

看看Katana OWIN startup context的源代码您可以看到 DataProtectionProvider 的默认实现是 MachineKeyDataProtectionProvider。不幸的是这个类没有暴露给我们,只有DpapiDataProtectionProviderhosted in azure 时,这将不起作用.

您可以找到 MachineKeyDataProtectionProvider 的实现 here 。您还需要实现自己的 MachineKeyDataProtector,如 here 所示。 。这些实现并不困难,本质上是 MachineKey.Protect() 的包装器。和 MachineKey.Unprotect() .

来自 KatanaMachineKeyDataProtectionProviderMachineKeyDataProtector 的实现项目来源(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"));

希望这有助于您走向正确的方向。

关于azure - 如何在 Azure Web 作业中实例化 OWIN IDataProtectionProvider?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28606676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com