最新苹果服务器认证,iOS 苹果登录Sign in with Apple 和 服务端验证(nodejs 版)
Sign in with Apple
服务端要做的其实很简单
nodejs需要装三个东西
npm install node-rsa
npm install axios
npm install jsonwebtoken
提供一个接口让客户端上传他那边获取到的identity
当客户端通过请求你提供的接口时,服务端可以使用axios请求这个接口 https://appleid.apple.com/auth/keys
,直接调用便会获取到一个 JWK,获取到的信息如下
{
"keys": [
{
"kty": "RSA",
"kid": "AIDOPK1",
"use": "sig",
"alg": "RS256",
"n": "lxrwmuYSAsTfn-lUu4goZSXBD9ackM9OJuwUVQHmbZo6GW4Fu_auUdN5zI7Y1dEDfgt7m7QXWbHuMD01HLnD4eRtY-RNwCWdjNfEaY_esUPY3OVMrNDI15Ns13xspWS3q-13kdGv9jHI28P87RvMpjz_JCpQ5IM44oSyRnYtVJO-320SB8E2Bw92pmrenbp67KRUzTEVfGU4-obP5RZ09OxvCr1io4KJvEOjDJuuoClF66AT72WymtoMdwzUmhINjR0XSqK6H0MdWsjw7ysyd_JhmqX5CAaT9Pgi0J8lU_pcl215oANqjy7Ob-VMhug9eGyxAWVfu_1u6QJKePlE-w",
"e": "AQAB"
}
]
}
我们要通过上面的keys里面的第一个对象去获取 Public Key,这里需要解码才能得到 Public Key,可以使用 node-rsa
let res = await axios.request({
method: "GET",
url: "https://appleid.apple.com/auth/keys",
})
let key = res.data.keys[0]
const pubKey = new NodeRSA();
pubKey.importKey({ n: Buffer.from(key.n, 'base64'), e: Buffer.from(key.e, 'base64') }, 'components-public');
let data = {publicKey: pubKey.exportKey(['public']), alg: key.alg}
然后使用 jsonwebtoken 解码获取用户信息
let payload = jwt.decode(identity,data.publicKey,data.alg)
打印 payload 会得到以下信息,sub就是用户的唯一标示
{
"iss": "https://appleid.apple.com",
"aud": "这个对应app的bundleid",
"exp": 1567494694,
"iat": 1567494094,
"sub": "这个字段和手机端获取的user信息相同",
"c_hash": "nRYP2wGXBGT0bIYWibx4Yg",
"auth_time": 1567494094
}
但是是需要验证的
jwt.verify(identity,data.publicKey,(error,decoded)=>{
payload = decoded;
});
服务端整体代码
router.get('/auth', async ctx => {
var data = await getPublicKey()
let identity = ctx.query.identity
//解码获得用户信息
~~ let payload = jwt.decode(identity,data.publicKey,data.alg)~~
jwt.verify(identity,data.publicKey,(error,decoded)=>{
payload = decoded;
console.log(payload)
});
})
async function getPublicKey() {
let res = await axios.request({
method: "GET",
url: "https://appleid.apple.com/auth/keys",
})
let key = res.data.keys[0]
const pubKey = new NodeRSA();
pubKey.importKey({ n: Buffer.from(key.n, 'base64'), e: Buffer.from(key.e, 'base64') }, 'components-public');
let data = {publicKey: pubKey.exportKey(['public']), alg: key.alg}
return data;
}
最新苹果服务器认证,iOS 苹果登录Sign in with Apple 和 服务端验证(nodejs 版)相关推荐
- golang 苹果登录,服务端验证identityToken(真实有效)
介绍 2019年之后,对于Apple App来说,如果要支持第三方登录,则必须同时支持苹果的第三方登录,即Sign in With Apple, 本文主要介绍如何使用Go语言实现Sign in Wit ...
- 最新苹果服务器认证,Sign in with Apple-苹果登录(客户端和服务端)
Sign in with Apple已经很久了,之前只是看了一堆的文章理论,今天就实实在在的操作了一次,为后面项目中使用埋下基础.这篇文章会从头到尾描述清楚从客户端到服务器如何一步步的实现苹果登录. ...
- ios 登录 java 后台,IOS苹果登录sign in with apple后端校验
IOS苹果登录sign in with apple后端校验 最近新开发的app在IOS平台app store connent提审的时候,被拒了,原因是app上如果有接第三方登陆(比如微信,微博,fac ...
- iOS 苹果登录 Sign in with apple Swift
iOS 苹果登录 Sign in with apple Swift 话不多说,直接看功能类,解释代码里有 import UIKit import AuthenticationServices @ava ...
- apns 苹果服务器压力,[iOS]APNs推送机制
目录 一.简介 二.APNs推送流程 三.什么是deviceToken 四.消息体 五.APNs推送中的问题 APNs 简介 Apple Push Notification service (APNs ...
- 苹果授权登录Sign In With Apple亲测通过版[100%成功]
苹果授权登录Sign In With Apple后台代码实现JAVA版本亲测通过版 废话不多说,直接复制把自己的包名写上就可以用了 有个别的小坑,HttpUtil自己写,没附上 Base64一定要用o ...
- Sign in with Apple(苹果授权登陆)服务端验证-测试通过版
Sign in with Apple(苹果授权登陆)服务端验证-测试通过版 1.先引用2个jwt用到的jar包 2.算法的工具类 三方登录调用验证工具类 苹果登录方式有2种,这里介绍基于JWT算法验证 ...
- iOS应用接入Sign In With Apple
iOS应用接入Sign In With Apple流程 前言 准备工作 开始编写 总结 参考文献 前言 App Store审核要求: New Guidelines for Sign in with A ...
- postman关闭ssl验证_【第5期】springboot:苹果内购服务端验证
苹果内购: 只要你在苹果系统购买APP中虚拟物品(虚拟货币,VIP充值等),必须通过内购方式进行支付,苹果和商家进行三七开 验证模式有两种: Validating Receipts With the ...
最新文章
- 【数据挖掘】数据挖掘算法 组件化思想 ( 模型或模式结构 | 数据挖掘任务 | 评分函数 | 搜索和优化算法 | 数据管理策略 )
- db2分页查询语句优化_数据量很大,分页查询很慢,该怎么优化?
- 【温故而知新-Javascript】使用 Ajax(续)
- 【bzoj3160】万径人踪灭
- wamp php文件怎么创建数据库,phpmyadmin怎么创建数据库
- 2020年周记(2/50)
- c++基础学习(10)--(文件、流、异常处理、动态内存、命名空间)
- LeetCode 138 复制带随机指针的链表
- LINUX awk操作
- 多文件结构和编译预处理命令
- 自动化部署mysql主从复制集群_使用docker部署mysql主从复制集群
- 用matlab解拉格朗日,用MATLAB实现拉格朗日插值
- Cesium屏幕坐标转世界坐标
- 跪求一个中国地图矢量图。
- 单招面试问为什么选择计算机这个专业,单招面试常见问题及答案 面试要注意什么...
- 发送消息(SendMessage)常识普及
- Error: `brew cask` is no longer a `brew` command. Use `brew <command> --cask` instead.
- win10+vs2019+FFTW64位安装配置保姆教程
- 安装Tomcat详细步骤
- 利用 RDP Wrapper 实现 Android 平板变身 Windows 平板
热门文章
- 1005 继续(3n+1)猜想
- java 数据权限_通用数据权限的思考与设计
- 英特尔携手生态伙伴发起卓越POS产品认证倡议,助力实体零售门店数字转型
- 自组网对讲机怎么轻松组网
- docker ii 群晖ds216_群晖DS216+II简易开箱
- 宝宝第一周成长数据和指标
- 服务器开通多个虚拟主机,一台服务器开通多虚拟主机
- 计算机专业独显好还是集显好,集成显卡和独立显卡有什么区别?哪个性能更好?...
- 唐诗宋词学习·156~160节
- 腾讯云全站加速CDN有哪些优势?适用于哪些场景?