c# - Asp.net web 表单、Asp Identity - 如何存储来自 Facebook、Twitter 等的声明

标签 c# facebook asp.net-identity asp.net-4.5

如何使它适用于标准 Web 表单?

我想做的是根据我从 Facebook(或其他服务)返回的声明填充 AspNetUserClaims 表。我可以在下面的 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);

最佳答案

我不能直接回答 webforms,MVC 的过程应该是相似的。

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

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

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

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

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

具体看方法

 ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model,
                           string returnUrl) 

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

关于c# - Asp.net web 表单、Asp Identity - 如何存储来自 Facebook、Twitter 等的声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19819362/

相关文章:

python - 如何解析来自 Python SDK 的嵌套 FB API 响应

php - Facebook邀请好友对话框高度问题

c# - 如何通过windows认证

c# - 如何使用一个属性来初始化另一个属性?

c# - 查询事件日志时如何创建EventBookmark

c# - 使用 MSMQ 将失败的消息与 NServiceBus 中的异常匹配

ruby-on-rails - 查找用户联系人或将其与 Facebook 好友匹配的最佳方式?

c# - 带有 OAuth2 的 ASP.NET Web API - 使用双因素身份验证时为 "Remember this browser"

c# - 手动编写 ASP.Net Identity 现有数据库脚本

c# - ASP.NET Core IdentityServer4 - 声明列表