这redirect_uri
应该是您服务器上的一个 URL,在他/她授予您访问他/她受保护的资源后,facebook 将重定向用户。在那里,您应该使用服务器端获取交换请求令牌code
(从 facebook 返回的查询字符串参数的值) 。access_token
redirect_uri
必须与 Facebook应用程序设置中使用 Facebook 登录的网站上的站点 URL设置位于同一域中https://developers.facebook.com/apps/{your-app-id}/summary/
- 将用户重定向到提供者
将用户重定向到提供者,以便他/她可以告诉提供者他/她正在让您访问您在scope
. 在用户同意或拒绝后,提供商会将用户重定向到redirect_uri
您的服务器上。为防止跨站点脚本请求伪造,您应该生成并存储 CSRF 令牌并与请求一起发送。
https://www.facebook.com/dialog/oauth?
client_id={your-app-id}&
redirect_uri=http://your-site.com/after-redirect&
scope=list,of,scopes&
state={a-hard-to-guess-random-csrf-token}
- 将请求令牌(代码)交换为访问令牌
在您的请求处理程序中,http://your-site.com/after-redirect
您应该检查error
和error_message
请求参数。如果没有错误,您应该首先验证(与存储的比较)state
CSRF 令牌,如果有效,然后通过服务器端获取将code
(请求令牌)交换为提供者的访问令牌。redirect_uri
和参数是必需的grant_type=authorization_code
(至少某些提供者是这样)。
https://graph.facebook.com/oauth/access_token?
code={request-token}&
client_id={your-app-id}&
client_secret={your-app-secret}&
redirect_uri=http://your-site.com/after-redirect&
grant_type=authorization_code
- 使用访问令牌访问用户的受保护资源
如果令牌类型是bearer
您应该access_token
在 HTTP 标头中以Authorization: Bearer {access-token}'
. 见:https ://www.rfc-editor.org/rfc/rfc6750#section-2.1
https://graph.facebook.com/me?
fields=name,birthday,photos.limit(10).fields(id, picture)&
access_token={access-token}