C# 电子邮件确认错误无效令牌AspNet标识

C# 电子邮件确认错误无效令牌AspNet标识,c#,asp.net-mvc,wcf,asp.net-identity-2,confirmation-email,C#,Asp.net Mvc,Wcf,Asp.net Identity 2,Confirmation Email,我有两个Web应用程序,WCF和MVC,它们共享同一个数据库。我使用的是Aspnet Identity 2.0 注册新用户时,它会创建确认令牌并向用户发送电子邮件。创建令牌、发送电子邮件主要在WCF中完成,验证在MVC应用程序中完成 var code = UserManager.GenerateEmailConfirmationToken(user.Id); string.Format("{0}/Account/ConfirmEmail?userId={1}&code={2}", Web

我有两个Web应用程序,WCF和MVC,它们共享同一个数据库。我使用的是Aspnet Identity 2.0

注册新用户时,它会创建确认令牌并向用户发送电子邮件。创建令牌、发送电子邮件主要在WCF中完成,验证在MVC应用程序中完成

var code = UserManager.GenerateEmailConfirmationToken(user.Id);
string.Format("{0}/Account/ConfirmEmail?userId={1}&code={2}", WebsiteUrl, 
   HttpUtility.UrlEncode(user.Id), HttpUtility.UrlEncode(codeId));
我使用的是同一个数据保护提供商

在WCF中

var provider = new Microsoft.Owin.Security.DataProtection.DpapiDataProtectionProvider("MyTestApplication");
UserManager.UserTokenProvider =
                new Microsoft.AspNet.Identity.Owin.DataProtectorTokenProvider<ApplicationUser>(
                    provider.Create("UserToken"))
                {
                    TokenLifespan = TimeSpan.FromDays(7)
                };
var provider=new Microsoft.Owin.Security.DataProtection.DpapiDataProtectionProvider(“MyTestApplication”);
UserManager.UserTokenProvider=
新的Microsoft.AspNet.Identity.Owin.DataProtectorTokenProvider

现在来解决我的问题

  • 在本地主机和qa中工作良好。在本地主机的SSL上也测试正常

  • 生产失败(使用SSL)。从WCF生成令牌并在MVC中验证失败

  • 在相同的应用程序中生成和验证
  • 无效令牌
    错误是如何发生的?
    web.config
    与此有关吗?

    发现问题

    它是IIS中的应用程序池。我对WCF和MVC应用程序使用了不同的应用程序池。现在我将它放在同一个应用程序池中,工作正常

    其他信息:对于存在相同问题且我的解决方案无法解决问题的用户,您可能需要尝试
    machineKey


    另外,我几乎总是在我把答案贴在stackoverflow上后自己找到答案。谢谢。

    谢谢!
    HttpUtility.UrlEncode
    为我完成了这项任务,已经配置了machineKey。对于其他关于machineKey的人来说,这也是一个很好的答案,帮助我生成:
    var dataProtectionProvider = new Microsoft.Owin.Security.DataProtection.DpapiDataProtectionProvider("MyTestApplication");
    manager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("UserToken"))
                    {
                        TokenLifespan = TimeSpan.FromDays(7)
                    };
                }