[英]ASP.Net identity 2 with windows service and MVC, Token issues
我在同一个解决方案中有一个 windows 服务、一个 MVC 应用程序和一个 Webforms web 应用程序。 我正在尝试从 Webforms 向用户发送密码确认电子邮件。 Webforms 应用程序通过 MSMQ 将消息发送到 Windows 服务(消息使用者)。 Windows 服务然后创建用户、他们的确认令牌并发送电子邮件。
用户在单击链接时会在 MVC 应用程序上确认他们的电子邮件。 所有这些在我的开发机器上都可以正常工作。
每当我在生产中部署时,我都会开始遇到无效令牌问题。
我的设置中的一些相关代码:
在 Windows 服务中:
Autofac 配置
builder.Register(c => new UserManager<User, long>(new UserStore(new DbEntities()))).InstancePerLifetimeScope();
在创建令牌和电子邮件的方法内部
构造函数
private readonly UserManager<User, long> _usermanager;
private readonly IUnitOfWork _uow;
public ConfiguratorUserService(IUnitOfWork uow)
{
_uow = uow;
_usermanager = new UserManager<User, long>(new UserStore((DeronEntities)_uow.Context));
var provider = new DpapiDataProtectionProvider("DeronConfigurator");
_usermanager.UserTokenProvider = new DataProtectorTokenProvider<User, long>(provider.Create("Passwords"));
}
方法
var user = new User
{
... more props setting
UserName = contact.Emailadres,
};
_usermanager.Create(user);
var provider = new DpapiDataProtectionProvider("Configurator");
_usermanager.UserTokenProvider = new DataProtectorTokenProvider<User, long>(provider.Create("Passwords"));
var token = _usermanager.GenerateEmailConfirmationToken(user.Id);
var data = Encoding.UTF8.GetBytes(token);
var base64EncodedToken = System.Convert.ToBase64String(data);
// And sending the e-mail here
然后在 MVC 方面我有
自动法
builder.Register(c => new UserManager<User, long>(new UserStore(new DeronEntities()))).InstancePerLifetimeScope();
身份验证设置(启动)
var provider = new DpapiDataProtectionProvider("Configurator");
app.CreatePerOwinContext(() => new UserManager(new UserStore(new DeronEntities()))
{
UserTokenProvider = new DataProtectorTokenProvider<User, long>(provider.Create("Passwords"))
});
帐户控制器
var data = Convert.FromBase64String(code);
var base64Decoded = Encoding.UTF8.GetString(data);
var result = await UserManager.ConfirmEmailAsync(userId, base64Decoded);
我已经尝试并发现了什么”:
尝试过的解决方案: http://www.gunaatita.com/blog/Invalid-Token-Error-on-Email-Confirmation-in-Aspnet-Identity/1056
MachineKeyDataProtector - 通过后台作业发送确认 email 时链接无效
我不确定如何为 Windows 服务设置机器密钥使用
我已经解决了这个问题。 这是通过使用机器密钥设置。
帮助我解决它的相关帖子:
MachineKeyDataProtector - 通过后台作业发送确认 email 时链接无效
所以我的设置现在看起来像这样:
在 Windows 服务
Autofac配置:
builder.Register<IUserTokenProvider<User, long>>(c => DataProtector.TokenProvider).InstancePerLifetimeScope();
builder.RegisterType<UserManager<User, long>>()
.As<UserManager<User, long>>().InstancePerLifetimeScope();
在构造函数中:
private readonly IUnitOfWork _uow;
private readonly UserManager<User, long> _usermanager;
public ConfiguratorUserService(UserManager<User, long> userManager, IUnitOfWork uow)
{
_uow = uow;
_usermanager = userManager;
}
在 MVC 中
自动法
builder.Register(c => new UserManager<User, long>(new UserStore(new DeronEntities()))).InstancePerLifetimeScope();
builder.Register<IUserTokenProvider<User, long>>(c => DataProtector.TokenProvider).InstancePerRequest();
我从链接的帖子中获取了 MachineKeyProtectionProvider
在您的 web.config 中添加机器密钥:
<system.web>
<machineKey decryption="AES" decryptionKey="dec key here" validation="HMACSHA256" validationKey="key here"/>
</system.web>
并在寡妇服务的app.config中添加同样的内容
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.