asp.net-mvc – 如何使用ASP.NET身份(OWIN)访问Facebook的私人信息?

我在ASP.NET MVC 5(使用RC1版本目前)开发一个网站。该网站将使用Facebook进行用户身份验证和检索初始配置文件数据。

对于身份验证系统,我使用新的基于OWIN的ASP.NET身份引擎(http://blogs.msdn.com/b/webdev/archive/2013/07/03/understanding-owin-forms-authentication-in-mvc-5.aspx),因为它大大简化了与外部提供程序进行身份验证的过程。

问题是,一旦用户首次登录,我想从Facebook配置文件获取其电子邮件地址,但此数据不包括生成的声明中。所以我想过这些替代方案来获得地址:

>指示ASP.NET身份引擎在其中包含电子邮件地址
从Facebook检索然后转换的数据集
到索赔。我不知道这是否可能。
>使用Facebook图API
(https://developers.facebook.com/docs/getting-started/graphapi)至
通过使用Facebook用户ID检索电子邮件地址(即
包括在索赔数据中)。但这不会工作,如果用户
将他的电子邮件地址设为私人。
>使用Facebook图形API,但指定“我”而不是
Facebook用户ID
(https://developers.facebook.com/docs/reference/api/user)。但是
访问令牌是必需的,我不知道如何(或如果它是
可能在所有)检索ASP.NET使用的访问令牌
获取用户数据。

所以问题是:

>我如何指示ASP.NET身份引擎检索
来自Facebook的附加信息,并将其包含在索赔中
数据?
>或者,如何检索生成的访问令牌等
我可以问Facebook吗?

谢谢!

注意:对于身份验证系统,我的应用程序使用基于此SO答案中链接的示例项目的代码http://stackoverflow.com/a/18423474/4574

解决方法

要从Facebook检索其他信息,您可以指定在配置facebook身份验证选项时要包括的范围。获取检索到的附加信息可以通过实现提供程序的OnAuthenticated方法来实现,如下所示:
var facebookOptions = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationoptions()
{
    Provider = new FacebookAuthenticationProvider()
    {
        OnAuthenticated = (context) =>
            {
                // All data from facebook in this object. 
                var rawUserObjectFromFacebookAsJson = context.User;

                // Only some of the basic details from facebook 
                // like id,username,email etc are added as claims.
                // But you can retrieve any other details from this
                // raw Json object from facebook and add it as claims here.
                // Subsequently adding a claim here will also send this claim
                // as part of the cookie set on the browser so you can retrieve
                // on every successive request. 
                context.Identity.AddClaim(...);

                return Task.Fromresult(0);
            }
    }
};

//Way to specify additional scopes
facebookOptions.Scope.Add("...");

app.UseFacebookAuthentication(facebookOptions);

根据代码here我看到电子邮件已经检索并添加一个索赔如果Facebook已发送。你不能看到它吗?

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...