c# - 在使用 ASP.NET Web API 2.0 和身份进行外部登录/注册期间从 Facebook 检索其他个人资料信息

标签 c# asp.net facebook asp.net-web-api asp.net-identity

似乎有很多关于如何使用 ASP.NET Identity 和 MVC 客户端从 Facebook 配置文件获取附加信息的文档,但我似乎无法找到任何关于如何从Web API Controller 。

我的 Startup.Auth.cs ConfigAuth 方法包含这个,如果我在 JObject wholeUser = context.User 上断点,它似乎工作正常

String XmlSchemaString = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims";
var facebookOptions = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationOptions()
{
    AppId = "*",
    AppSecret = "*",
    Provider = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationProvider()
    {
        OnAuthenticated = (context) =>
        {
            JObject wholeUser = context.User;

            context.Identity.AddClaim(new System.Security.Claims.Claim("urn:facebook:access_token", context.AccessToken, XmlSchemaString, "Facebook"));
            context.Identity.AddClaim(new System.Security.Claims.Claim("urn:facebook:email", context.Email, XmlSchemaString, "Facebook"));
            return Task.FromResult(0);
        }
    }
};
facebookOptions.Scope.Add("email");
app.UseFacebookAuthentication(facebookOptions);

一旦通过身份验证,wholeUser 将拥有我需要的所有信息,例如生日等。但是一旦超出此范围,我就不知道如何获取它了。

我需要在 AccountController.RegisterExternal 中获取此信息,但我似乎无法正确配置它。许多 MVC doco 都在 ExternalLoginCallback 方法中使用它:

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

但在 Web API 中找不到 AuthenticationManager,因此如果我将其更改为仅 Authentication,它将返回 null,除非我将参数更改为 DefaultAuthenticationTypes.ExternalBearer。这是我得到的最接近的结果,但返回的 ClaimsIdentity 对象没有任何其他声明 - 只有用户名和 ID。

总的来说,就好像我正确地从 Facebook 获取信息并塞入 context.Identity 中,但我不知道如何从 Controller 访问它。注意:ConfigAuth 中的上下文对象是 Microsoft.Owin.Security.Facebook.FacebookAuthenticatedContext 类型

最佳答案

我不确定你是否需要和我一样的东西,但看看 http://aliu.ro/easy-mvc4-facebook-authentication-example/

有一个小型示例项目可以执行 Facebook 身份验证、检索访问 token 并使用我在 NuGet 中找到的一些 .NET SDK 进行调用

关于c# - 在使用 ASP.NET Web API 2.0 和身份进行外部登录/注册期间从 Facebook 检索其他个人资料信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25656577/

相关文章:

c# - AggregateException - AggregateException.Flatten().InnerException 代表什么?

c# - C# 和 C++ 中的可选参数

c# - 如何在中间是其他窗口的占位符的 WPF 中创建布局?

asp.net - 帮助对齐控件

c# - 如何使用 JavaScriptSerializer 解析带有数字键的 JSON 对象

javascript - FB按钮 "like"非常慢

c# - SHA512算法的哈希值是128位长?

c# - 无法使用 MVC3 Razor 访问属性

facebook - 使用 Graph Api 2.7 在一次调用中获取多个帖子的帖子见解

iOS Facebook 登录助手 sdk,如 Parser