apple oauth 三方登录
网站需要使用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
应设为code
,response_mode
应设为form_post
2.接收授权码code,向apple服务器申请token
用户授权后,会向设置的 redirect_uri带着code发送一个post请求,还有设置的state,id_token(第一次授权登录没有这个字段),如果第一次授权登录,会返回用户信息user(第一次登录才有user信息,后面不能获取到,需要保存到服务端,如果再次获取,需要用户手动取消appleid在该应用程序上的授权)
苹果官方文档如下,H
andle 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_idredirect_uri
:redirect_uricode
:上一步获取到的授权码,codeclient_secret
:一个生成的JWT
刷新令牌参数:
grant_type
:'refresh_token'为刷新令牌client_id
:client_idclient_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 三方登录相关推荐
- OAuth协议(三方登录授权)
1.什么是三方登录? 三方登录就是通过第三方应用程序的账号密码, 快速的获取用户相关的信息实现登录 例如: QQ登录 点击QQ登录按钮之后,就会要求用户输入QQ的账号和密码 只要用户输入了QQ的账号和 ...
- OAuth机制_web站点接入微软azure账号进行三方登录
文章目录 ⭐前言 ⭐微软三方登录流程
- 三方登录(微博为例)
三方登录介绍 三方登录流程(以微博为例) 1)前端获取认证code 1. 在Vue页面加载时动态发送请求获取微博授权url 2. django收到请求的url后,通过微博应用ID(client_id) ...
- apple帐号登录服务器端接入
新博客地址(shankusu.me) 原文转载自 http://cwqqq.com/2020/09/27/apple_login_api_server_side apple帐号登录服务器端接入 最近有 ...
- A072_前台登录_三方登录
目录 内容介绍 1. 前台登录-账号登录 1.1.前台登录 1.2.axios携带token-common.js 1.3.axios后置处理后台拦截错误-common.js 1.4.前台登录拦截-co ...
- twitter三方登录的实现
twitter的三方登录当时研究了不短时间,也算是第一次做三方登录的东西,将oauth标准彻头彻尾的了解了一下,下面是一些当时总结的资料,参考了很多博文 1.去官网注册账号并在开发者网站创建项目 ht ...
- [OAuth2.0三方登录系列文章-1]OAuth2.0与三方登录的端到端方案
系列文章 [OAuth2.0三方登录系列文章-1]OAuth2.0与三方登录的端到端方案 [OAuth2.0三方登录系列文章-2]如何设计基于OAuth2.0的授权登录SDK以及竞品分析 [OAuth ...
- 三方登录---新浪微博登录
OAuth2.0授权认证 oauth2.0是什么? OAuth(开放授权)是⼀个开放标准,允许⽤户让第三⽅应⽤访问该⽤户在某⼀⽹站上存储的私密的 资源(如照⽚,视频,联系⼈列表),⽽⽆需将⽤户名和密码 ...
- 安卓三方登录趟坑,QQ,微信,微博,Twitter,Facebook,Instagram
前言 最近给app加入三方登录,由于比较多,所以就用的友盟统一登录,会比一个一个配置方便点 正文 先说QQ,微信,微博: 国内QQ,微信,微博三方登录其实还行,并没有太多坑,文档也挺完善的. 但是需要 ...
最新文章
- python斗地主游戏源码_我用tkinter写的一个斗地主练习复盘python程序
- Epic苹果诉讼案,却把索尼微软Steam都拉下水,网友忙吃瓜
- Matlab篇(三)MATLAB中conj的用法
- 160个CrackMe005
- 自动分号插入 ASI
- Socket通信---网络通信学习笔记(一)
- python实验四_python实验四
- java的equals方法_Java Date equals()方法与示例
- Gym - 101755G Underpalindromity (树状数组)
- input file获取文件路径_python 基础 — 整理文件
- CentOS 7虚拟机支持virsh console访问
- 软件工程学习总结(4)——软件工程概论
- Gitlab利用Webhook实现Push代码后的Jenkins自动构建
- (学习日记)裘宗燕:C/C++ 语言中的表达式求值
- linux每天定时开关机,如何实现ubuntu每天定时关机
- DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常
- Hadoop文章收集汇总 - 如禁止转载,请及时联系本人 收集学习互联网各位前辈分享的文章
- webhook机器人php源码,机器人之钉钉机器人webhook 对接 ThinkPHP3.2 实现Bug告警通知...
- while 循环语句的使用
- ARM920T的MMU与Cache ——转载
热门文章
- 满分考生进入清华学造芯片,集成电路学院院长亲自带,网友:为中华之崛起而读书...
- error An unexpected error occurred: “https://registry.npmjs.org/d3-geo-proje
- 力扣:探索初级算法——数组篇——有效的数独
- MNE初学入门(一)
- EBS提交取消请求、请求集程序fnd_request
- SystemUI之通知图标控制
- 使用VMware安装Ubuntu虚拟机 - 完整教程
- 电视hdr测试软件,短路三分钟 | 你家电视、显示器真的支持HDR么?
- 读唐巧博客2011年总结感想
- 产业的互联网化是什么时代_新时代:为什么互联网公司不应忽视65岁以上的一代...