Jon*_*son 59 facebook oauth-2.0 facebook-c#-sdk facebook-oauth
我找到了这个问题,它有一个答案,但从那时起facebook改变了令牌格式,现在它是这样的:
AAACEdEose0cBACgUMGMCRi9qVbqO3u7mdATQzg[more funny letters]ig8b3uss9WrhGZBYjr20rnJu263BAZDZD
Run Code Online (Sandbox Code Playgroud)
简而言之,你无法从中推断出任何东西.我还找到了访问令牌调试器,它显示了我正在寻找的信息,如果你粘贴一个令牌,这很好,但不能帮助我以编程方式进行.
重点是,如果有人为用户获取令牌,他可以使用它来访问图表,这就是我在我的应用程序中所做的事情 - 我想确保人们转发我的应用程序发给他们的令牌,而不是另一个.
我的申请流程是:
我的应用程序是安全的,无论facebook如何,访问完成也都经过身份验证,但是!在这个流程中,我发现的弱链接是我无法验证我获得的访问令牌是否已经为我的应用程序签名 - 我不喜欢它,因为我将令牌缓存用于离线使用,我希望100%确定它们是我的应用程序,具有我的权限.
那么验证我获得的令牌与我的应用程序相关的(最佳)方式是什么(与用户的关系,我使用令牌来访问/我并查看此令牌用于哪个用户)
我不需要解密令牌(我猜它是某种AES),我只是在找一个会告诉我令牌与我的应用程序ID匹配的端点.
(编辑:使用C#SDK,如果重要..但是图形/休息调用以提供该信息同样好:))
小智 61
https://graph.facebook.com/app/?access_token=[user_access_token]
这将返回为此令牌生成的应用,您可以将其与应用的ID进行比较.
via*_*lly 24
检查访问令牌的官方图终端是:
GET graph.facebook.com/debug_token?
input_token=[user_access_token]&
access_token=[app_token_or_admin_token]
Run Code Online (Sandbox Code Playgroud)
响应示例:
{
"data": {
"app_id": 138483919580948,
"application": "Social Cafe",
"expires_at": 1352419328,
"is_valid": true,
"issued_at": 1347235328,
"metadata": {
"sso": "iphone-safari"
},
"scopes": [
"email",
"publish_actions"
],
"user_id": 1207059
}
}
Run Code Online (Sandbox Code Playgroud)
app_token_or_admin_token
可以使用Graph API调用获得:
GET graph.facebook.com/oauth/access_token?
client_id={app-id}
&client_secret={app-secret}
&grant_type=client_credentials
Run Code Online (Sandbox Code Playgroud)
如果user_access_token不属于生成app_token_or_admin_token的应用程序,则debug_token端点将失败.
相关的facebook文档:
检查访问令牌:https: //developers.facebook.com/docs/facebook-login/login-flow-for-web-no-jssdk/#checktoken
应用令牌:https: //developers.facebook.com/docs/facebook-login/access-tokens/#apptokens
有文件证明这是确保使用的方法appsecret_proof
.
GET graph.facebook.com/v2.5/me?access_token=[TOKEN]&appsecret_proof=[PROOF]
Run Code Online (Sandbox Code Playgroud)
这不仅验证它是有效令牌,还验证令牌属于应用程序.它还可以一次性获取用户数据.
你可以PROOF
使用这个(从这里)在C#中导出:
public static string ComputeHmacSha256Hash(string valueToHash, string key)
{
byte[] keyBytes = Encoding.ASCII.GetBytes(key);
byte[] valueBytes = Encoding.ASCII.GetBytes(valueToHash);
byte[] tokenBytes = new HMACSHA256(keyBytes).ComputeHash(valueBytes);
valueBytes = null;
keyBytes = null;
StringBuilder token = new StringBuilder();
foreach (byte b in tokenBytes)
{
token.AppendFormat("{0:x2}", b);
}
tokenBytes = null;
return token.ToString();
}
ComputeHmacSha256Hash(accessToken, appSecret);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
25726 次 |
最近记录: |