首页 > 其他分享 >Facebook 登陆

Facebook 登陆

时间:2023-05-03 21:34:07浏览次数:43  
标签:口令 access 访问 token Facebook 登陆 应用

Facebook登陆

说句题外话:其实知道怎么写以后,写代码是相较简单的,比较难得地方是不知道该去哪找参考资料,如果遇见问题或者是难点去哪解决,所以每次写博客的时候尽量详细写一些找资料的过程,代码部分反而是其次的。

接下来就开启我们的Facebook登陆之旅

官方文档

  • 首先登陆官方的开发者平台开发者平台
  • 直接在页面上点击登陆详情或者顶部导航栏文档-登陆都可,如果要找其他文档直接进入文档地址
  • 进入登陆文档,可以看看概览什么的,或者可以直接进入指南Guides
  • Graph API,在 Facebook 开放平台中存取数据,服务端获取用户信息会用到

访问口令

下面介绍一下各种访问口令,我这边之前做过Facebook广告数据的获取用到其他类型的访问口令,所以这边都介绍一下

用户访问口令


应用任何时候以特定用户身份调用 API 读取、修改或写入该用户的 Facebook 数据时,都需要此类访问口令。通常可通过登录对话框获得用户访问口令,并且应用需征得用户允许才能获取此口令。

这个也是咱们使用Facebook登陆要用到的

用户访问口令分为两种形式:短期有效口令和长期有效口令。短期有效口令的有效期通常为一至两个小时,长期有效口令的有效期通常为60天左右。这些有效期也不是一直维持不变;有效期可能会在不发出警告的情况下发生更改,也有可能会提前到期。

提示:
通过网页登录生成的访问口令是短期有效口令,可以使用应用密钥执行服务器端API调用,将它们转换为长期有效口令。

使用 Facebook iOS 和 Android SDK 的移动应用默认获得长期有效口令。

应用访问口令


此类访问口令用于修改和读取应用设置,也可用于发布开放图谱操作。它使用应用与 Facebook 之间的预定义密钥生成,之后用于执行更改应用中各个设置的调用。可以通过服务器到服务器的调用获得应用访问口令。

提示:
应用访问口令用于代表应用而非用户请求 Facebook API。它可以用于修改应用参数、创建和管理测试用户,或者读取应用的成效分析。

生成应用访问口令

  • 应用编号
  • 应用密钥
代码示例
curl -X GET "https://graph.facebook.com/oauth/access_token
  ?client_id={your-app-id}
  &client_secret={your-app-secret}
  &grant_type=client_credentials"

还有一种方法可以向图谱 API 发出调用,并且不需要使用生成的应用访问口令。您可以在发出调用时以 access_token 参数的形式发送应用编号和应用密钥:

curl -i -X GET "https://graph.facebook.com/{api-endpoint}&access_token={your-app_id}|{your-app_secret}"  
警告:
选择使用生成的访问口令还是使用这种方法取决于您隐藏应用密钥的位置。

公共主页访问口令


此类访问口令与用户访问口令类似,区别在于该口令会向读取、写入或修改 Facebook 公共主页数据的 API 授予权限。如要获取公共主页访问口令,需要先获取用户访问口令,并请求公共主页权限或其他您需要的权限。拥有用户访问口令后,便可通过图谱 API 获取公共主页访问口令。

警告:
如要生成公共主页访问口令,公共主页管理员必须向应用授予公共主页权限或所需的其他权限。获得权限后,便可使用拥有必要权限的用户访问口令,检索公共主页访问口令。
curl -i -X GET "https://graph.facebook.com/{your-user-id}/accounts?access_token={user-access-token} 

客户端访问口令


客户端口令是可将其嵌入原生移动二进制文件或桌面应用以识别应用的标识符。客户端口令嵌入在应用中,因而不是密钥标识符。客户端口令用于访问应用层 API。客户端口令可在应用面板中找到。

重要:
从预计在 2022 年初发布的 iOS 和 Android SDK v13.0 开始,所有对图谱 API 的调用都将需要客户端口令。

与应用口令一样,客户端口令会代表应用而非用户发出Graph API 请求。

不同于其他口令,客户端访问口令无法单独在请求中使用,而须配合应用编号使用。如要执行此操作,请在应用编号末尾附加口令,并使用竖线 (|) 分隔:

{app-id}|{client-token}

例如:

access_token=1234|5678

如要获取应用的客户端访问口令,请执行以下操作:

  • 登录您的开发者帐户。
  • 在应用页面中选择一款应用,然后打开该应用的面板。
  • 在面板中,依次前往设置 > 高级设置 > 安全 > 客户端口令。

可移植性

上面我们看到了好多种访问口令,弄的乱乱的,不知到怎么使用了,可以参考一下可移植性文档做一个合适的了解以及选取

我们作为只是使用Facebook登陆,并且想要用户只要登陆授权一次,客户端登录状态就会保存不用频繁调用Facebook,那么就需要服务端来保存权限信息,并能读取、校验用户状态了,所以直接这里就选用的是:

在原生手机客户端或网页客户端登录。在服务器发出 API 请求(使用长期口令)。

正式开始

Facebook授权登陆(服务端)

Facebook配置

  • 注册成为开发者,在Facebook开发者官网注册成开发者
  • 点击右上角->我的应用->创建应用
  • 获取应用编号、应用密钥(后续开发使用)
  • 开通登录,点击左边产品->添加产品->登录
提示:
整个流程可以通过Facebook的API调试工具测试:

[用户信息获取入门指南](https://developers.facebook.com/docs/graph-api/get-started)

[API工具](https://developers.facebook.com/tools/explorer)

Facebook登陆流程图

登陆流程图

token校验

在使用访问口令时,需要检查与之相关的信息,如该口令的用户或有效期。如要获取此类信息,可使用Facebook的调试工具,或使用 API 端点。
调试和错误

访问api:

curl -i -X GET "https://graph.facebook.com/debug_token?input_token={input-token}&access_token={valid-access-token}
提示:
接口中的access_token和input_token均是客户端传递的token值

API 调用的响应为 JSON 数组,如下所示:

{
    "data":{
        "app_id":"{app-id}",
        "type":"USER",
        "application":"{app-name}",
        "data_access_expires_at":1576687825,
        "expires_at":1570820400,
        "is_valid":true,
        "scopes":[
            "pages_show_list",
            "public_profile"
        ],
        "granular_scopes":[
            {
                "scope":"pages_show_list",
                "target_ids":[
                    "{page-1-app-can-access-id}",
                    "{page-2-app-can-access-id}"
                ]
            }
        ],
        "user_id":"10215241773831025"
    }
}

如果是长期访问口令,则系统也会返回 issued_at 字段。

获取长期访问口令

默认的用户和主页访问口令为短期口令,会在数小时后过期,但可以使用短期口令交换长期口令

在使用 iOS、Android 或 JavaScript SDK 时,如果用户在最近 90 天使用过应用,SDK 会自动刷新口令。使用 Facebook SDK 的原生移动应用会获得有效期为 60 天左右的长期用户访问口令。当应用用户向 Facebook 服务器发出请求时,系统会每天刷新一次这些口令。如果未发出任何请求,口令就会在大约 60 天后过期,且用户必须再次登录才能获得新口令。

如果需要长期用户访问口令,可以从短期用户访问口令中生成。长期口令的有效期通常在 60 天左右。

需要准备以下各项:

  • 一个有效的用户访问口令
  • 应用编号
  • 应用密钥
    查询 GET oauth/access_token 端点。
curl -i -X GET "https://graph.facebook.com/{graph-api-version}/oauth/access_token?  
    grant_type=fb_exchange_token&          
    client_id={app-id}&
    client_secret={app-secret}&
    fb_exchange_token={your-access-token}" 

响应示例:

{
  "access_token":"{long-lived-user-access-token}",
  "token_type": "bearer",
  "expires_in": 5183944            //The number of seconds until the token expires
}

获取用户信息

Graph API是在 Facebook 开放平台中存取数据的主要方式。Graph API是一种基于 HTTP 的 API,应用可用其以编程方式查询数据,发布新动态,管理广告,上传照片和执行各种其他任务。
获取用户信息Graph API
接口请求地址:

curl -i -X GET \
  "https://graph.facebook.com/USER-ID?fields=id,name,email,picture&access_token=ACCESS-TOKEN"
注意事项
接口中的access_token指的是前面配置中获取的应用编号和应用密钥组合,值为{Your AppId}|{Your AppSecret}, 记得请求路径做urlEncode

官方工具

快使用官方工具试一试吧:
https://developers.facebook.com/tools/explorer/

很贴心,一进去就是登陆的请求

直接点击获取Generate Access Token:

可以看见官方请求的地址大概是这样

https://www.facebook.com/v16.0/dialog/oauth?response_type=token&client_id=127819966950874&redirect_uri=http://localhost:8093/jingxc/facebook/login/callback&scope=public_profile

也就是说我们修改redirect_uri就可以得到一个access_token,这里就相当于模拟客户端的请求登陆了,然后我们验证和获取用户信息

获取token

返回:

{
    "access_token":[
        "EAAB0QGe5rdoBAKP8v2u6sLXquobvqMtZCZBA084FkG0jQOTJGhY96A55rr6IXFnyI9s87AmKnftUfrpW1AnxPuhhUXXnYtCCSLa5B7oyVktYSqhx6KDzM9ey4DyoxJ1PoCcMcnB7liVPN8nMkrPqOMQRx9xyrLoKPh6OiIh8rLKNkpRvWDqcQkefwE6poh6zqygeJCJ2lM5yjZBeP0PDhkvChJuVeEdKpc0x9iySlk3ojd7QZCeVvyRlUONIRXoZD"
    ],
    "data_access_expiration_time":[
        "1690719298"//这个时间有两个月
    ],
    "expires_in":[
        "6302"
    ]
}

校验token

@Override
public ReturnResult checkToken(String accessToken) {
    String url = "https://graph.facebook.com/debug_token?input_token=" +
            accessToken + "&access_token=" + accessToken;

    Map<String, String> checkToken = client.getToMap(url, new HashMap<>(), new HashMap<>());

    System.out.println(JSON.toJSONString(checkToken));
    return ReturnResultSuccess.builder().code(ConstantCommon.RETURN_CODE_200).msg("success")
            .data(checkToken).build();
}

返回:

{
    "data":{
        "metadata":{
            "auth_type":"rerequest"
        },
        "expires_at":1682949600,
        "application":"LOGIN",
        "user_id":"200435082771639",
        "is_valid":true,
        "data_access_expires_at":1690719298,
        "scopes":[
            "public_profile"
        ],
        "type":"USER",
        "app_id":"127819966950874"
    }
}

获取用户信息

@Override
@OperationLogger
public ReturnResult checkUser(String accessToken, String userId) {
    String url = "https://graph.facebook.com/" + userId + "?fields=id,name"
            + "&access_token=" + accessToken;

    Map<String, String> checkUser = client.getToMap(url, new HashMap<>(), new HashMap<>());

    System.out.println(JSON.toJSONString(checkUser));
    return ReturnResultSuccess.builder().code(ConstantCommon.RETURN_CODE_200).msg("success")
            .data(checkUser).build();
}

返回:

{"name":"景兴春","id":"200435082771639"}
上面的accessToken均为用户登陆授权的token

获取用户信息也可以换成-应用访问口令

至此Facebook的登陆基本完成

标签:口令,access,访问,token,Facebook,登陆,应用
From: https://www.cnblogs.com/jingxc/p/17369685.html

相关文章

  • SSH远程登陆Unbuntu(SSH服务器和客户端配置)
    SSH服务器配置参考:https://blog.csdn.net/weixin_43833430/article/details/127262464 《Ubuntu安装SSH服务》目的:在Unbuntu 中,安装openssh 服务器,开启服务器;安装防火墙,配置防火墙参数(可以通过SSH),然后开启防火墙。重要命令:1systemctlenablessh#开机启动2systemc......
  • Meta Shop 元宇宙商城:Facebook主播最爱的移动电商平台app
    新加坡一家高科技独角兽公司 MetaShop【元宇宙商城】自2022年成立以来,已迅速成为Facebook主播和消费者们的最爱,也是东南亚最受欢迎的选品购物类APP。这款移动电商平台为消费者提供了一种全新的购物体验,主播在带货过程中可以更轻松地选择适合他们的商品,而买家也可以在移动端便捷购......
  • 元宇宙商城助力Facebook主播开启全球选品购物新篇章!
    在今天下午举行的新闻发布会上,新加坡高科技独角兽公司MetaShop【元宇宙商城】宣布自2022年成立以来,已成功吸引了大量来自中国、日韩、东南亚等地区的卖家入驻,成为最受欢迎的选品购物类APP。此次发布会邀请了来自Facebook的知名主播、平台卖家代表以及业内专家,共同探讨移动电商市场......
  • 元宇宙商城Meta Shop:赋能Facebook主播,助力全球购物新体验!
    自2022年成立以来,新加坡高科技独角兽公司MetaShop【元宇宙商城】在全球范围内取得了显著的成就,尤其在Facebook主播界受到了极大关注。这家移动电商平台已成功吸引了来自中国、日韩、东南亚等地区的卖家入驻,成为最受欢迎的选品购物类APP。MetaShop致力于为消费者和主播提供一个一......
  • Facebook刷新开放域问答SOTA:模型训模型!Reader当Teacher!
    文|Sherry不是小哀编|小轶一部问答系统发展史就是一部人工智能发展史。早在1950年的图灵测试就提出:如果人类无法通过问答将机器和人区分开,那么这个机器就可以被认为具有智能。问答系统和人工智能有着密不可分的关系。从基于规则和结构化数据的自动问答,到基于精细设计神经网......
  • 设置wordpress:关闭底部默认的facebook等链接(wordpress 6.2)
    一,默认显示:如图:说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest     对应的源码可以访问这里获取: https://github.com/liuhongdi/     或: https://gitee.com/liuhongdi说明:作者:刘宏缔邮箱:[email protected]......
  • 【小飞象出海】Facebook营销和独立站营销的优势和缺点
    Facebook广告营销是当下跨境电商卖家最喜欢的营销方式之一,对电商卖家来说,通过Facebook进行营销是一件非常好的方式,首先就是因为Facebook巨大的流量及关联度,这为电商卖家提供了巨大的销售潜力,所以大部分跨境电商卖家的精力和注意力都移到了这个平台上来。但是也有些卖家会说在自己......
  • 【专栏精选】使用LeanCloud实现玩家登陆
    本文节选自洪流学堂公众号技术专栏《大话Unity2019》,未经允许不可转载。洪流学堂公众号回复专栏,查看更多专栏文章。洪流学堂,让你快人几步。你好,我是郑洪智。小新:“今天我们是不是该学习登陆了?”大智:“没错,不过登陆我不准备给你讲,你自己学,有啥问题再问我。”小新:“好的吧,正好考验......
  • 【工具软件】Postman 设置登陆全局 token
    先设置Tests脚本constres=pm.response.json()pm.globals.set('token',res.data.token)使用......
  • qq客户端第三方登陆
    xaml代码:<Windowx:Class="WpfApp1.QQFormCef"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mic......