NipGeihou's blog NipGeihou's blog
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档

NipGeihou

我见青山多妩媚,料青山见我应如是
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档
  • 设计模式

  • 开发规范

  • 经验分享

  • 记录

  • 快速开始

    • Spring Boot整合RabbitMQ
    • Spring Boot整合Email邮件发送
    • Spring Boot整合jasypt加密配置文件
    • Spring Boot整合单元测试
    • Spring Boot整合优雅关机
    • Spring Boot整合Redis分布式锁
    • Spring Boot整合MyBatis-plus
    • XXL-JOB快速上手
    • Spring Boot整合WebSocket(stomp协议)
    • SpringBoot整合i18n(多语言)
    • 第三方登录 - Google
    • 第三方登录 - Facebook
      • 创建应用
      • Web拉起授权
        • 方式1:跳转授权
        • 方式2:弹窗授权
      • 后端校验
        • 生成应用访问口令(可选)
        • 校验token
        • 获取用户信息
      • 踩过的坑
      • 参考
    • Spring Boot 整合Elasticsearch
  • 笔记

  • 面试题

  • 微服务

  • 踩过的坑

  • Java
  • 快速开始
NipGeihou
2023-06-09
目录

第三方登录 - Facebook

# 创建应用

https://developers.facebook.com/apps (opens new window)

image-20230609170745220

image-20230609170842389

找到以下参数备用:

  • 设置 - 基本: 应用编号 、 应用密钥
  • 设置 - 高级 - API 版本: version

# Web 拉起授权

# 方式 1:跳转授权

# 方式 2:弹窗授权

# 后端校验

image-20230610155544673

笔记

建议 API 接口都携带版本前缀,如 https://graph.facebook.com/v17.0/debug_token ,以免引版本升级导致的不兼容。

# 生成应用访问口令 (可选)

将前端传递的 access_token(用户token) 换取应用程序访问令牌

curl --location --request GET 'https://graph.facebook.com/oauth/access_token?client_id=xxxx&client_secret=应用id&grant_type=client_credentials'
{
    "access_token": "{应用编号}|{应用密钥}",
    "token_type": "bearer"
}

注意

不要直接复制官方文档的,会携带不可见字符在 URL 中,导致我卡了很久!!

如要复制,留意 URL 是否符合预期。

# 校验 token

用于判断前端传递的 token 是否是当前应用的

curl --location --request GET 'https://graph.facebook.com/debug_token?input_token={userToken}&access_token={应用编号}|{应用密钥}'
{
    "data": {
        "app_id": "xxxxx",
        "type": "USER",
        "application": "test",
        "data_access_expires_at": 1694140400,
        "expires_at": 1691491274,
        "is_valid": true,
        "issued_at": 1686366627,
        "scopes": [
            "public_profile"
        ],
        "user_id": "xxxxxx"
    }
}

在官方文档中,access_token 给出两种传递方式:

  1. 先换取 应用程序访问令牌 ,使用其作为 access_token
  2. 直接使用 "应用编号|应用密钥" 作为 access_token
  • 实践中发现,都无法成功获取用户信息(最后发现是把客户端密钥当做应用密钥),最终使用访问口令工具 - Meta 开发者 (opens new window) 中的 App Token ,在页面中提到 应用口令不会过期,应妥善保密 ,相信可以当正式 token 使用。
  • 或是 input_token 和 access_token 都使用 userToken,也能得到

# 获取用户信息

获取用户 id、name、email 信息,其中 emai 信息需要在 用例 - 身份验证和帐户创建 - 编辑 开启

curl --location --request GET 'https://graph.facebook.com/v17.0/me?fields=id,name,email&access_token=用户token'
{
    "id": "xxxx",
    "name": "xxxx",
    "email": "[email protected]"
}

# 踩过的坑

  1. 提示需要 appsecret_proof 参数

解决一:在设置 - 高级,关闭 必须提供应用密钥

解决二:参考登录安全 - Facebook 登录 (opens new window) 生成

# 参考

  • 手动构建登录流程 - Facebook 登录 (opens new window)
  • Facebook API (opens new window)
  • Graph API User (opens new window)
上次更新: 2024/03/11, 22:37:05
第三方登录 - Google
Spring Boot 整合Elasticsearch

← 第三方登录 - Google Spring Boot 整合Elasticsearch→

最近更新
01
磁盘管理与文件系统
05-02
02
网络测试 - iperf3
05-02
03
Docker Swarm
04-18
更多文章>
Theme by Vdoing | Copyright © 2018-2025 NipGeihou | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式