使用WebApi时获取Facebook OAuth令牌并存储在声明中

时间:2014-11-29 22:32:05

标签: c# facebook asp.net-web-api oauth

我一直关注此博客,该博客展示了如何使用示波器从用户那里获取额外的Facebook数据,然后将其存储在声明中。

http://blogs.msdn.com/b/webdev/archive/2013/10/16/get-more-information-from-social-providers-used-in-the-vs-2013-project-templates.aspx

在标准的MVC Web应用程序中,这似乎工作正常。但是,当使用WebApi时,我正在努力获取令牌。 Startup.Auth代码在我的项目中完全相同,我可以看到请求的范围是正确的,但我不明白我应该在什么时候访问所请求的数据。此外,索赔似乎永远不会被存储,这是奇怪的。

1 个答案:

答案 0 :(得分:1)

我建议您阅读我关于ASP.NET Web API 2 external logins with Facebook and Google的博客文章,其中介绍了如何在不使用MVC依赖项或模板的情况下将外部logis与Web API集成。

如果您需要获取Facebook令牌,您需要覆盖on Authenticated方法并将其存储在自定义声明中,以便它可以在下面的代码中提供与声明相同的声明:

   public class FacebookAuthProvider : FacebookAuthenticationProvider
    {
        public override Task Authenticated(FacebookAuthenticatedContext context)
        {
            context.Identity.AddClaim(new Claim("ExternalAccessToken", context.AccessToken));
            return Task.FromResult<object>(null);
        }
    }

你在Startup.cs中调用这个类:

 //Configure Facebook External Login
            facebookAuthOptions = new FacebookAuthenticationOptions()
            {
                AppId = "xxxxxx",
                AppSecret = "xxxxxx",
                Provider = new FacebookAuthProvider()
            };
            app.UseFacebookAuthentication(facebookAuthOptions);