Ruc*_*han 4 c# asp.net-mvc wcf asp.net-identity asp.net-identity-2
我有一个服务项目(WCF)和MVC项目,它使用相同的数据库来处理移动和接口部分的服务部分.我必须在两者上设置电子邮件确认.
我使用OWIN ASP.NET 2.0库进行身份验证,两个项目都有单独的UserManagers.
对于MVC
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
var dataProtectionProvider = options.DataProtectionProvider;
if (dataProtectionProvider != null)
{
manager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>dataProtectionProvider.Create("ASP.NET"));
}
}
Run Code Online (Sandbox Code Playgroud)
对于WCF
var provider = new Microsoft.Owin.Security.DataProtection.DpapiDataProtectionProvider("ASP.NET");
UserManager.UserTokenProvider =new Microsoft.AspNet.Identity.Owin.DataProtectorTokenProvider<ApplicationUser>(
provider.Create("EmailConfirm"));
var code = idManager.UserManager.GenerateEmailConfirmationToken(appuser.Id);
Run Code Online (Sandbox Code Playgroud)
问题 在MVC中生成的电子邮件确认令牌工作正常.
在WCF中,当我创建电子邮件确认令牌时,需要从MVC网站进行验证.在这里,它给了我"无效令牌".
我认为这是由于令牌代码不匹配,我试图让它们尽可能相同,但我不知道哪一个在Wcf和MVC之间.
顺便说一句.我在Visual Studio上测试localhost.
我找到了解决方案.问题是DataProtectionProvider
.
在MVC上,它来自:
public static ApplicationUserManager
Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
var dataProtectionProvider = **options.DataProtectionProvider**;
Run Code Online (Sandbox Code Playgroud)
在WCF上,它来自:
var provider = new Microsoft.Owin.Security.DataProtection.DpapiDataProtectionProvider("ASP.NET");
Run Code Online (Sandbox Code Playgroud)
所以我在MVC中使用与WCF相同:
var dataProtectionProvider = new Microsoft.Owin.Security.DataProtection.DpapiDataProtectionProvider("ASP.NET");
Run Code Online (Sandbox Code Playgroud)
此外,关键点是:
HttpUtility.UrlEncode
进行编码.例:
var code = UserManager.GenerateEmailConfirmationToken(appuser.Id);
var callbackUrl = string.Format("http://MVCSite/Account/ConfirmEmail?userId={0}&code={1}", HttpUtility.UrlEncode(appuser.Id), HttpUtility.UrlEncode(code));
Run Code Online (Sandbox Code Playgroud)
更新
对于任何试图托管多个项目的人,您需要使用这两个内容中的一个才能使用确认代码:
http://gunaatita.com/Blog/How-to-Generate-Machine-Key-using-IIS/1058
归档时间: |
|
查看次数: |
2697 次 |
最近记录: |