2

如何让这适用于标准 Web 表单?

我想要做的是AspNetUserClaims根据我从 Facebook(或其他服务)返回的声明填充表格。我可以在下面的 OnAuthenticated 代码中看到返回的值,如何将这些声明添加到当前登录用户的上下文中?


目前,OnAuthenticated火灾发生后,它显然将我返回到内置示例提供的页面 (RegisterExternalLogin.aspx)。但是,声明消失了,登录 Facebook 的上下文也消失了。

在不使用 MVC 的情况下,如何根据当前登录用户的上下文将 Facebook 的声明填充到 AspNetUserClaims 表中?

        var fboptions = new FacebookAuthenticationOptions();
        fboptions.AppId = "xxxxxxxxxxxxxxxxxxx";
        fboptions.AppSecret = "yyyyyyyyyyyyyyyyyyyyyy";
        fboptions.Scope.Add("email");
        fboptions.Scope.Add("friends_about_me");
        fboptions.Scope.Add("friends_photos");

        fboptions.Provider = new FacebookAuthenticationProvider()
        {
            OnAuthenticated = (context) =>
            {
                foreach (var v in context.User)
                {
                    context.Identity.AddClaim(new System.Security.Claims.Claim(v.Key, v.Value.ToString()));
                }
                context.Identity.AddClaim(new System.Security.Claims.Claim("FacebookAccessToken", context.AccessToken));
                return Task.FromResult(0);
            },
        };
        app.UseFacebookAuthentication(fboptions);
4

1 回答 1

1

我不能直接回答网络表单,MVC 的过程应该是相似的。

登录后,通过使用外部提供商,您将被定向到您注册新用户的页面。从该页面回发后,必须添加一行以ClaimsIdentity再次获取,例如:

ClaimsIdentity claimsIdentity = await
 AuthenticationManager.GetExternalIdentityAsync (
                        DefaultAuthenticationTypes.ExternalCookie);

如果没有对上面这条线的调用,它对我根本不起作用,所以也许这就是你的问题所在。

一旦ClaimsIdentity通过对身份属性的声明集合进行迭代,Claims就可以完成。这应该包括您在 OnAuthenticated 回调委托中添加的 Facebook 令牌。您所要做的就是调用UserManager.AddClaimAsync()将其添加到 Claims 数据库表中。

有关更多信息,请查看我的AccountController课程https://github.com/beabigrockstar/AspNetIdentitySocialProfileImage/blob/master/Controllers/AccountController.cs

具体看方法

 ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model,
                           string returnUrl) 

以及对 的调用StoreAuthTokenClaims(),当然还有我遵循的过程StoreAuthTokenClaims()

于 2013-11-07T03:48:38.823 回答