对不起,如果不清楚,我正在使用Web API瓦特/ ASP.NET身份2.0模板,所以OAuth管道代码已经存在那里。
我能找到我自己问题的答案,让我与你分享。
所以问题是,重定向后我从Facebook的OAuth对话框获得的令牌与我的应用程序可用于以实际用户名称调用Facebook Graph API不同。该Graph API令牌可在以下位置访问:
假设您使用上述模板,可以使用FacebookAuthenticationOptions实例的定义找到App_Data/Startup.Auth.cs类。在那里您可以捕获API令牌并将其保存到数据库中。例如:
var fbopts = new FacebookAuthenticationOptions
{
AppId = Global.Config.ExternalServices.FacebookAppID,
AppSecret = Global.Config.ExternalServices.FacebookAppSecret,
Scope = { "email", "user_friends", "publish_actions" },
Provider = new FacebookAuthenticationProvider
{
OnAuthenticated = async context =>
{
// This token will be OK for calling Graph API
string accessToken = context.AccessToken;
using (var tracer = Global.Tracer.CreateBuilder())
{
try
{
tracer.InformationLine("Storing Facebook OAuth token: " + accessToken);
string fbUserID = context.Identity.GetUserId();
string fbUserName = context.Identity.Name;
tracer.InformationLine("Facebook User ID: " + fbUserID);
tracer.InformationLine("Facebook User Name: " + fbUserName);
// Store it into the db
// assume Task StoreOAuthToken(string providerName, string providerKey, string accessToken) is defined
await StoreOAuthToken("Facebook", fbUserID, accessToken);
}
catch (Exception ex)
{
tracer.ErrorLine("Failed.", ex);
}
}
}
}
};
app.UseFacebookAuthentication(fbopts);
此时你得在由以下各列的表中的一行:
OAuthAccessToken.ProviderName
OAuthAccessToken.ProviderKey
OAuthAccessToken.AccessToken
现在你可以提供一个API,将消费者有API令牌调用图形API,如:做一个Facebook登录后
[Route("AccessTokens")]
[Authorize]
public async Task<List<OAuthAccessToken>> GetAccessTokens(string providerName = null)
{
var userID = User.Identity.GetUserId();
var q = from l in this.Context.AspNetUserLogins // Managed by ASP.NET Identity 2.0
from t in this.Context.OAuthAccessTokens // Stored by you with above code
where l.UserId == userID && t.ProviderName == l.LoginProvider && t.ProviderKey == l.ProviderKey
select t;
if (!string.IsNullOrEmpty(providerName)) q = q.Where(t => t.ProviderName == providerName);
return await q.ToListAsync();
}
所以在Android上我有承载令牌我的应用程序的Web API调用,我可以让我的令牌通过调用访问图形API以上行动。
也许有更简单的方法来实现上述。请让我知道,如果你找到任何。
我不确定您使用Web API个人帐户模板配置的OAuth2 Web API的含义是什么? 我之前发布了如何获取FB令牌(外部访问令牌),然后用本地访问令牌(由本地权限生成)替换它。所以你现在会有2个令牌,本地的对Web API有好处,外部的对于调用FB图API是很好的。 在这里检查http:// bitoftech。net/2014/08/11/asp-net-web-api-2-external-logins-social-logins-facebook-google-angularjs-app/ – 2014-10-02 08:36:50
谢谢,你的评论帮助我找到了适合项目的解决方案我正在使用的模板。我在下面解释了我的解决方案。 – unbornchikken 2014-10-02 14:37:07
不客气,如果有用的话,请点我的评论。 – 2014-10-02 14:54:05