如何使用 PHP SDK 安全地向用户提供 access_token?

发布于 2024-12-18 09:01:26 字数 263 浏览 2 评论 0原文

我本来打算使用 $facebook->getAccessToken() 但查看代码似乎会为用户提供应用程序访问令牌(通过 getApplicationAccessToken() ) 如果无法从 getUserAccessToken() 返回结果。如果我是对的,这意味着从 getAccessToken() 向用户传递访问令牌可能在某些情况下返回 API 机密。

如何安全地获取访问令牌?

I was going to use $facebook->getAccessToken() but looking at the code it seemed like it'd give the user the application access token (via getApplicationAccessToken()) if it was unable to return a result from getUserAccessToken(). If I'm right, that means that passing the user an access token from getAccessToken() could under certain circumstances return the API secret.

How can I safely get an access token?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

国粹 2024-12-25 09:01:26

您可以使用 getUser() 确保在返回访问令牌之前拥有当前用户会话。 编辑:正如评论中提到的,这似乎不适用于 Facebook 的 PHP 客户端功能。用户的 Cookie 可以包含其用户 ID,但也可以包含无效(过期)代码。 PHP 客户端将尝试用code 交换用户访问令牌,但会失败。因此,getUser() 将返回用户 ID,而 getAccessToken() 将返回应用访问令牌。 getUser() 不是检查有效用户访问令牌的有效方法。

如果您想格外小心:Facebook 应用程序令牌的形式均为 |。您可以确保您返回的访问令牌不具有该格式:

$token = $fb->getAccessToken();
$tokenParts = explode('|', $token, 2);
if ($tokenParts[0] != <your_app_id>) {
    return $token;
} else {
    return null;
}

You can use getUser() to ensure that you have a current user session prior to returning the access token. EDIT: as mentioned in the comments, it seems this will not work with how Facebook's PHP client functions. A user's cookie can contain their user ID but also an invalid (expired) code. The PHP client will try to exchange the code for a user access token and fail. So getUser() will return a user ID while getAccessToken() will return an app access token. getUser() is not a valid way to check for a valid user access token.

If you want to be extra careful about it: Facebook app tokens all of the form of <app id>|<some hash, possibly your secret>. You could ensure that the access token you are returning does not have that format:

$token = $fb->getAccessToken();
$tokenParts = explode('|', $token, 2);
if ($tokenParts[0] != <your_app_id>) {
    return $token;
} else {
    return null;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文