网站需要使用apple 三方登录,研究了一下,记录如下:

目录

配置

正式开发(oauth2.0)

1.登录授权页面

2.接收授权码code,向apple服务器申请token


配置

我们拥有一个苹果开发者账号后,需要进行相关配置,会得到一些id和文件,苹果官方配置文档如下:https://developer.okta.com/blog/2019/06/04/what-the-heck-is-sign-in-with-apple

1.配置结束后,将获得俩个文件 三个ID和一个回调URL

redirectURI = 'https://abc.baidu.com/appleAuth' // 自己设置的重定向域名,可添加多个

webClientId = 'com.baidu.abc.signInWithApple';  // 设置的client_id,一般是域名的反写

teamId = 'JI87S9KI7D';  // 10个字符的team_id

keyId = 'KOI98S78J6';  // 获取的10个字符的密钥标识符

2.一个以p8结尾的文件,用作生成jwt 用来请求token

正式开发(oauth2.0)

正式开发前,可以先熟悉一下oauth2.0的认证流程

1.用户点击 导向到认证服务器

2.用户选择是否授权

3.授权后,认证服务器会带着授权码code请求重定向url

4.客户端获取到授权码code后,发送到后端服务器,然后用授权码code请求认证服务器

5.认证服务器验证授权码code 没问题后,返回access token 和refresh token

苹果官方文档

前端文档:

https://developer.apple.com/documentation/sign_in_with_apple

后端文档:https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_rest_api

1.登录授权页面

就是一个html页面,会显示一个苹果登录的按钮,点击登录按钮后,会跳转到认证页面

代码如下:

<html><head></head><body><script type="text/javascript" src="https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js"></script><div id="appleid-signin" data-color="black" data-border="true" data-type="sign in"></div><script type="text/javascript">AppleID.auth.init({clientId : 'xxxxxx',scope : 'email name',redirectURI: 'xxxxxxxxxxxxxxxxxx',state : 'xxxxxxxxxxxx'});</script></body>
</html>

clientId:配置获得

scope:权限范围,用来获取用户信息  email name 其中一个或者两个都设置

redirectURI:回调url,用户同意授权后,会带code向回调url 发起一个post请求,后端服务器需要去接受授权码code,然后去申请令牌

state:可以设定任意值,苹果认证服务器会返回这个值,可以利用这个参数来进行一些判断

我开发过程中,自己测试是利用上面的html页面,正式开发是手动拼接跳转授权页地址。

https://appleid.apple.com/auth/authorize?client_id=xxxxxxxxx&redirect_uri=xxxxxxxxx&response_type=xxxxxxxx&scope=email name&response_mode=[RESPONSE_MODE]&state=xxxxxxxxx
如果手动拼接的话 response_type 应设为 coderesponse_mode应设为form_post

2.接收授权码code,向apple服务器申请token

用户授权后,会向设置的 redirect_uri带着code发送一个post请求,还有设置的state,id_token(第一次授权登录没有这个字段),如果第一次授权登录,会返回用户信息user(第一次登录才有user信息,后面不能获取到,需要保存到服务端,如果再次获取,需要用户手动取消appleid在该应用程序上的授权)

苹果官方文档如下,Handle the Response部分有对返回参数的解释

https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_js/incorporating_sign_in_with_apple_into_other_platforms

特别注意 :用户取消后,会返回error(user_cancelled_authorize)给redirect_uri,这种情况也是需要处理的

苹果post请求如下:

下一步做的是服务端发起一个post请求利用授权码code去申请令牌

苹果官方文档如下:

https://developer.apple.com/documentation/sign_in_with_apple/generate_and_validate_tokens

请求的url为:POST https://appleid.apple.com/auth/token

注意:  Content-Type: application/x-www-form-urlencoded

获取令牌参数:

  • grant_type:'authorization_code'为获取令牌
  • client_id:client_id
  • redirect_uri:redirect_uri
  • code:上一步获取到的授权码,code
  • client_secret:一个生成的JWT

刷新令牌参数:

  • grant_type:'refresh_token'为刷新令牌
  • client_id:client_id
  • client_secret:client_secret,
  • refresh_token:上一步获取到的id_token

关于生成client_secret

苹果官方说生成jwt最长时间期限为6个月,可以每次都生成一个jwt

苹果官方文档 Creating the Client Secret 部分说明如下:

这里就需要用到上面获得的TEAM ID 、CLIENT ID 和 KEY ID

https://developer.apple.com/documentation/sign_in_with_apple/generate_and_validate_tokens

然后我们服务端 post 请求到 https://appleid.apple.com/auth/token 来获取令牌,

获取参数如下:

其中的id_token 解密后,会获得用户信息 email和sub(用户身份标识),sub可以存到数据库与用户信息关联

apple oauth 三方登录相关推荐

  1. OAuth协议(三方登录授权)

    1.什么是三方登录? 三方登录就是通过第三方应用程序的账号密码, 快速的获取用户相关的信息实现登录 例如: QQ登录 点击QQ登录按钮之后,就会要求用户输入QQ的账号和密码 只要用户输入了QQ的账号和 ...

  2. OAuth机制_web站点接入微软azure账号进行三方登录

    文章目录 ⭐前言 ⭐微软三方登录流程

  3. 三方登录(微博为例)

    三方登录介绍 三方登录流程(以微博为例) 1)前端获取认证code 1. 在Vue页面加载时动态发送请求获取微博授权url 2. django收到请求的url后,通过微博应用ID(client_id) ...

  4. apple帐号登录服务器端接入

    新博客地址(shankusu.me) 原文转载自 http://cwqqq.com/2020/09/27/apple_login_api_server_side apple帐号登录服务器端接入 最近有 ...

  5. A072_前台登录_三方登录

    目录 内容介绍 1. 前台登录-账号登录 1.1.前台登录 1.2.axios携带token-common.js 1.3.axios后置处理后台拦截错误-common.js 1.4.前台登录拦截-co ...

  6. twitter三方登录的实现

    twitter的三方登录当时研究了不短时间,也算是第一次做三方登录的东西,将oauth标准彻头彻尾的了解了一下,下面是一些当时总结的资料,参考了很多博文 1.去官网注册账号并在开发者网站创建项目 ht ...

  7. [OAuth2.0三方登录系列文章-1]OAuth2.0与三方登录的端到端方案

    系列文章 [OAuth2.0三方登录系列文章-1]OAuth2.0与三方登录的端到端方案 [OAuth2.0三方登录系列文章-2]如何设计基于OAuth2.0的授权登录SDK以及竞品分析 [OAuth ...

  8. 三方登录---新浪微博登录

    OAuth2.0授权认证 oauth2.0是什么? OAuth(开放授权)是⼀个开放标准,允许⽤户让第三⽅应⽤访问该⽤户在某⼀⽹站上存储的私密的 资源(如照⽚,视频,联系⼈列表),⽽⽆需将⽤户名和密码 ...

  9. 安卓三方登录趟坑,QQ,微信,微博,Twitter,Facebook,Instagram

    前言 最近给app加入三方登录,由于比较多,所以就用的友盟统一登录,会比一个一个配置方便点 正文 先说QQ,微信,微博: 国内QQ,微信,微博三方登录其实还行,并没有太多坑,文档也挺完善的. 但是需要 ...

最新文章

  1. python斗地主游戏源码_我用tkinter写的一个斗地主练习复盘python程序
  2. Epic苹果诉讼案,却把索尼微软Steam都拉下水,网友忙吃瓜
  3. Matlab篇(三)MATLAB中conj的用法
  4. 160个CrackMe005
  5. 自动分号插入 ASI
  6. Socket通信---网络通信学习笔记(一)
  7. python实验四_python实验四
  8. java的equals方法_Java Date equals()方法与示例
  9. Gym - 101755G Underpalindromity (树状数组)
  10. input file获取文件路径_python 基础 — 整理文件
  11. CentOS 7虚拟机支持virsh console访问
  12. 软件工程学习总结(4)——软件工程概论
  13. Gitlab利用Webhook实现Push代码后的Jenkins自动构建
  14. (学习日记)裘宗燕:C/C++ 语言中的表达式求值
  15. linux每天定时开关机,如何实现ubuntu每天定时关机
  16. DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常
  17. Hadoop文章收集汇总 - 如禁止转载,请及时联系本人 收集学习互联网各位前辈分享的文章
  18. webhook机器人php源码,机器人之钉钉机器人webhook 对接 ThinkPHP3.2 实现Bug告警通知...
  19. while 循环语句的使用
  20. ARM920T的MMU与Cache ——转载

热门文章

  1. 满分考生进入清华学造芯片,集成电路学院院长亲自带,网友:为中华之崛起而读书...
  2. error An unexpected error occurred: “https://registry.npmjs.org/d3-geo-proje
  3. 力扣:探索初级算法——数组篇——有效的数独
  4. MNE初学入门(一)
  5. EBS提交取消请求、请求集程序fnd_request
  6. SystemUI之通知图标控制
  7. 使用VMware安装Ubuntu虚拟机 - 完整教程
  8. 电视hdr测试软件,短路三分钟 | 你家电视、显示器真的支持HDR么?
  9. 读唐巧博客2011年总结感想
  10. 产业的互联网化是什么时代_新时代:为什么互联网公司不应忽视65岁以上的一代...