我一直关注此博客,该博客展示了如何使用示波器从用户那里获取额外的Facebook数据,然后将其存储在声明中。
在标准的MVC Web应用程序中,这似乎工作正常。但是,当使用WebApi时,我正在努力获取令牌。 Startup.Auth代码在我的项目中完全相同,我可以看到请求的范围是正确的,但我不明白我应该在什么时候访问所请求的数据。此外,索赔似乎永远不会被存储,这是奇怪的。
答案 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);