永远不会调用AspNet Identity AddClaimAsync

时间:2014-03-19 20:49:40

标签: asp.net facebook visual-studio-2013 asp.net-identity owin

我正在使用asp.net表单并编写了我自己的UserStore类来实现接口IUserClaimStore<IdentityUser>(和其他),因为我想在没有EntityFramework的情况下使用AspNet Identity并为它编写自己的数据访问层。

一切似乎都很好,但是当我尝试将声明添加到数据库表时,我遇到了问题。

Startup.Auth.cs我配置FacebookAuthentication,如下所示:

var options = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationOptions();
options.AppId = "xxxxxxxxxxxxxxxxxxx";
options.AppSecret = "xxxxxxxxxxxxxxxxxxxxxx";
options.SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie;
options.Provider = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationProvider()
                       {
                          OnAuthenticated = (context) =>
                          {                                 
                             foreach (var x in context.User)
                             {
                                context.Identity.AddClaim(new System.Security.Claims.Claim(x.Key, x.Value.ToString()));
                             }

                             context.Identity.AddClaim(new System.Security.Claims.Claim("FacebookAccessToken", context.AccessToken));

                             return System.Threading.Tasks.Task.FromResult(0);
                          }
                       };

app.UseFacebookAuthentication(options);

调用OnAuthenticated方法并添加一些声明。但是我的UserStore类中的AddClaimAsync方法永远不会被调用,因此我的DB中永远不会有UserClaim条目。在某些时候,将调用GetClaimsAsync方法(我认为在调用authenticationManager.SignIn(...)期间)。所以我认为我的UserStore应该可以正常工作。

我在创建ASP.net表单网站时也使用Visual Studio模板中的代码。

我希望我的情况很明确,有人可以帮助我。

的问候,
斯特凡


编辑:解决方案

我发现了同样的问题 - &gt; Asp.net web forms, Asp Identity - how to store claims from Facebook, Twitter, etc

1 个答案:

答案 0 :(得分:0)

原因是您正在向ClaimsIdentity添加声明,ClaimIdentity是一个内存中的对象,代表来自外部提供程序的用户。您没有调用ASP.NET Identity来将声明存储在数据库中。为此,您应该在UserManager上调用AddClaim API。