如何使它适用于标准 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 数据库表中。
有关更多信息,请查看我的 AccountController
类 https://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/