我发现了这个问题,它有一个答案,但是自那以后Facebook改变了令牌格式,现在它是这样的:
AAACEdEose0cBACgUMGMCRi9qVbqO3u7mdATQzg[more funny letters]ig8b3uss9WrhGZBYjr20rnJu263BAZDZD
简而言之,你无法从中推断出任何信息。我还发现了访问令牌调试器,如果你粘贴一个令牌进去,它会显示我正在寻找的信息,这很好,但不能帮助我以编程方式完成它。
重点是,如果有人为用户获取了一个令牌,他可以使用它来访问图形,这就是我在我的应用程序中所做的-我想确保人们转发了由我的应用程序发出的令牌,而不是其他令牌。
我的应用程序流程是:
1. 从 Facebook 获取访问令牌(没有特别之处,在这里,服务器端流程中描述的方式。 (也使用 iPhone 和 Android,并且如果我记得正确,它们具有类似的流程)
[设备] <-> [Facebook]
2. 使用该访问令牌,设备将使用令牌访问我的应用程序服务器
[设备] <-> [Jonathan的应用程序]
在我的服务器上,我将访问令牌附加到用户上,并使用它来授予该用户在我的应用程序中的权限。(使用 Facebook 连接来验证用户)
我的应用程序是安全的,访问也是经过身份验证的,与 Facebook 无关,但是!在这个流程中,我确定的一个薄弱环节是我无法确定获取的访问令牌是否为我的应用程序签名-我不喜欢它,因为我会缓存离线使用的令牌,我希望它们百分之百是我的应用程序,具有我的权限。
那么,最好的身份验证方式是什么,以确保我获得的令牌与我的应用程序相关(为了与用户关联,我使用令牌访问 /me 并查看此令牌所属的用户)。
我不需要解密令牌(我猜它是某种 AES),我只是在寻找一个端点,告诉我令牌与我的应用程序 ID 匹配。
(编辑:如果有影响的话,使用 C# SDK,但调用图形/REST 来提供该信息同样好 :))