如何检索 Facebook 用户信息 ASP.NET WEB API 2

叶夫根尼

我想注册一个用户,通过一个外部提供者(比如facebook),为了得到我需要的信息,我如下配置FacebookProvider

var options = new FacebookAuthenticationOptions {
    AppId = "***",
    AppSecret = "***",
    Scope = { "email" },
    Provider = new FacebookAuthenticationProvider {
        OnAuthenticated = (context) => {
            foreach (var x in context.User)
            {
                var claimType = string.Format("urn:facebook:{0}", x.Key);
                string claimValue = x.Value.ToString();
                if (!context.Identity.HasClaim(claimType, claimValue))
                context.Identity.AddClaim(new System.Security.Claims.Claim(claimType, claimValue, XmlSchemaString, "Facebook"));
            }

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

options.Fields.Add("id"); 
options.Fields.Add("name"); 
options.Fields.Add("email");

options.SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalBearer;

app.UseFacebookAuthentication(options);

在调试时的 OnAuthenticated 我看到所有请求的字段但是当我从邮递员调用 RegisterExternal 时,如下图

注册外呼邮递员

GetExternalLoginInfoAsync 返回 null

var info = await Authentication.GetExternalLoginInfoAsync();
if (info == null)
{
    return InternalServerError();
}

那么如何检索查询字段,例如电子邮件?我认为所有必要的信息都存储在 cookie 中,但是如何将它们传输到服务器并提取 Identity 实例?

所有 nuget 软件包都已更新到最新版本

ps 我计划使用来自 iOS 应用程序的 API

叶夫根尼

我找到了解决方案。

更改ExternalLoginData类如下

private class ExternalLoginData
{
    ...
    // here added new field
    public IList<Claim> Claims { get; private set; }

    public static ExternalLoginData FromIdentity(ClaimsIdentity identity)
    {
        ...
        return new ExternalLoginData
        {
            ...
            // here added claims setting
            Claims = identity.Claims.ToList()
        };
    }
}

更改ExternalLogin回调如下

public async Task<IHttpActionResult> GetExternalLogin(string provider, string error = null)
{
    ...
    if (hasRegistered)
    {
        ...
    }
    else
    {
        // here replaced getting claims by Claims field
        IEnumerable<Claim> claims = externalLogin.Claims;
        //IEnumerable<Claim> claims = externalLogin.GetClaims();
        ClaimsIdentity identity = new ClaimsIdentity(claims, OAuthDefaults.AuthenticationType);
        Authentication.SignIn(identity);

    }

    return Ok();
}

结果,我们收到了一个不记名令牌。从中提取身份,我们收到了先前保存的声明。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在ASP.NET Core 2中对Facebook Web API进行身份验证

ASP.NET Web API-SQL-检索信息

Facebook Graph API:检索用户朋友的信息

asp.net Web API-如何验证用户

ASP.NET Web API 2-如何过帐?

Facebook取消授权ASP.NET Web API

如何在ASP.NET Core Web API中使用jwt令牌以仅读取用户信息而不进行任何验证

ASP.NET Web API 2 ViewModels?

ASP.NET Web API 2-用户注册电子邮件确认失败

如何在 ASP.NET 核心 WEB API 控制器中获取 OpenID 信息

如何在ASP.NET Web API 2中使用log4net布局模式有条件地捕获用户名?

如何通过API从Facebook获取用户信息?

如何从Asp.Net Web Api 2获得类似于Google API响应的JSON结果?

如何配置nlog.config使其包含asp.net core 2 Web API请求自定义标头信息?

如何在.NET Web API 2中检索所有请求的参数?

我如何使用javascript获取有关用户用来从asp.net Web应用程序获取设备的信息?

如何将XML从ASP.NET 4 Web API返回到ASP.NET Core 2应用程序?

在ASP.Net Web API控制器中如何查找用户名?

如何在OData asp.net Web API中创建注册用户操作

如何使用facebook Graph API检索用户国家?

ASP.NET Web API中的用户身份验证

ASP.Net Core Web API 中的安全用户操作

如何从Web API调用ASP.NET Core Web MVC

如何在ASP.NET中获取登录的用户信息

如何在asp.net web api 2中实现依赖注入

如何将查询字符串参数传递给ASP.NET Web API 2

如何在Asp.net Web Api 2中使用多种Put和Post方法

如何在ASP.NET Web API 2中具有可选的请求模型属性?

如何从ASP.NET Core RC2 Web Api返回HTTP 500?