如何验证Web站点中Web服务生成的电子邮件确认令牌

时间:2015-02-10 19:16:35

标签: .net-4.5 asp.net-identity-2

我使用.NET 4.5和MVC5 5.2.2网站以及Web API 2.2服务。该网站使用的是Identity 2.0,我使用MachineKey作为数据保护提供商。在网站上,我能够创建新用户,生成电子邮件确认令牌,然后在其返回时验证该令牌。

在Web服务中,我需要遵循相同的过程 - 创建新用户,生成电子邮件确认令牌并将该令牌通过电子邮件发送给新用户。然后,用户应该能够访问该站点,确认电子邮件地址并完成帐户的创建。我遇到的问题是网络服务生成的电子邮件确认令牌无法通过网站进行验证。

服务和站点都在同一台机器上。我也可以在Visual Studio中的本地计算机上复制它。我的第一个猜测是机器键不是一样的,但改变两个站点以使用相同的功能。我已经尝试并确认了:

  • 这两个网站在<httpRuntime targetFramework="4.5"/>部分都有<system.web>
  • 我在两个网站都试过<machineKey compatibilityMode="Framework45"/>
  • 我尝试使用decryption=AESvalidation=SHA1生成机器密钥 - 无论是否设置compatibilityMode。
  • https://aspnetidentity.codeplex.com/workitem/2439,我尝试捕获数据保护提供程序并使用它而不是MachineKey。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

所以我昨天的第一个教训就是尽可能用尽可能少的子弹来玩俄罗斯轮盘赌。否则你最终会感到脚疼......还有额头疼痛。

我的问题最终是因为我知道确认令牌是因为我使用UrlHelper而从网站上正确编码的网址,我忘记了服务没有使用UrlHelper这意味着那些令牌正确编码。解决之后,我能够找出machinekey设置。

对于发现此问题的任何人,如果您需要在不同站点之间共享Identity 2.0令牌,我可以确认您需要在web.config中为每个站点设置一个公共machinekey集。我无法弄清楚是否可以在IIS Express中配置公共machinekey,所以我最终将密钥放在源代码控制中的web.config中,然后使用配置转换删除它们以使其生成确保在网站发布时不包括它们。在生产中,我将使用IIS为默认网站设置这些密钥,以便在两个站点之间共享它们。