Sign in with Apple 流程总结
流程图

相关说明
UserId
与用户的 Apple Id 一一对应。在同一个开发帐号下的所有 app 里,获取到的值都一样。
IdentityToken
identityToken 是一个 Json Web Token (JWT).
它由点号 (".") 分割为三部分:
header
payload
signature
前两部分是两个 Json 字符串经过 base64Url 编码的结果。第三部分是前面二者加密后再做 base64Url 编码得到的。
identityToken 示例
eyJraWQiOiI4NkQ4OEtmIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiaW8uZ2l0aHViLjB4YTZhIiwiZXhwIjoxNTgxODU0NjI0LCJpYXQiOjE1ODE4NTQwMjQsInN1YiI6IjAwMTQ3Mi5kYWIwNGY5YmE5ZDM0ZjAzYWQ2NDFmYTgyZDFjNTk4Yi4wOTQ1Iiwibm9uY2UiOiJhLXJhbmRvbSAtc3RyaW5nIiwiY19oYXNoIjoiY1pheTd3cW5tSHVQY0c2RmhWRHFaQSIsImVtYWlsIjoieWY3YTNwczhobTkxQHByaXZhdGVyZWxheS5hcHBsZWlkLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjoidHJ1ZSIsImlzX3ByaXZhdGVfZW1haWwiOiJ0cnVlIiwiYXV0aF90aW1lIjoxNTgxODU0MDI0fQ.gQ5Ug1yHLdtqsYJkdLCWYLJmlUVjkhiWxFo1PE4Q4QZ4zZ3mjlMn7n5ZcbxpoIyJ7wa_qHJFTP6q4IfBPXGi5OIrnx8sOeX8DS_GAobAfIB-PaLrtAE7ZAFs0tcsU5mOrKoa5JySX3TF6PEBYl12YdTJu0774Ouu0IYYkFcXRaUUpjS7Hr-jHgQRTXkDstjnGay2GCVg49ihPWaRJLc0ARaE5wL0k0snM8ImzsoDEV8tXYuMlF8DYIGI6cRrDmLhRnPOWv1xbM9C3qmEukE9HyV051tdtIgowo2ne2XsmPqWlCDH45JLUJV7NsIuvCEsNWd9OwPLY5U6pIjNgRAbxg
前两部分解码后结果示例:
- header:
{
kid: "86D88Kf",
alg: "RS256"
}
- payload:
{
"iss":"https://appleid.apple.com",
"aud":"io.github.0xa6a",
"exp":1581854624,
"iat":1581854024,
"sub":"001472.dab04f9ba9d34f03ad641fa82d1c598b.0945",
"nonce":"a-random -string",
"c_hash":"cZay7wqnmHuPcG6FhVDqZA",
"email":"yf7a3ps8hm91@privaterelay.appleid.com",
"email_verified":"true",
"is_private_email":"true",
"auth_time":1581854024}
| 字段名 | 说明 |
|---|---|
| iss | 签发机构网址 |
| aud | bundle id |
| exp | int 过期时间戳 |
| iat | 签发时间 |
| sub | user id |
| nouce | 客户端发出请求时携带的随机串,用于对照 |
| c_hash | 一段哈希,暂无用 |
| email_verified | email 是否确认了 |
| is_private_email | 是否为 private email |
| auth_time | 授权时间 |
分享一个解码工具 JWT Decoder
获取苹果的公钥
地址
https://appleid.apple.com/auth/keys
请求方法
GET
返回示例
{
"keys": [
{
"kty": "RSA",
"kid": "86D88Kf",
"use": "sig",
"alg": "RS256",
"n": "iGaLqP6y-SJCCBq5Hv6pGDbG_SQ11MNjH7rWHcCFYz4hGwHC4lcSurTlV8u3avoVNM8jXevG1Iu1SY11qInqUvjJur--hghr1b56OPJu6H1iKulSxGjEIyDP6c5BdE1uwprYyr4IO9th8fOwCPygjLFrh44XEGbDIFeImwvBAGOhmMB2AD1n1KviyNsH0bEB7phQtiLk-ILjv1bORSRl8AK677-1T8isGfHKXGZ_ZGtStDe7Lu0Ihp8zoUt59kx2o9uWpROkzF56ypresiIl4WprClRCjz8x6cPZXU2qNWhu71TQvUFwvIvbkE1oYaJMb0jcOTmBRZA2QuYw-zHLwQ",
"e": "AQAB"
},
{
"kty": "RSA",
"kid": "eXaunmL",
"use": "sig",
"alg": "RS256",
"n": "4dGQ7bQK8LgILOdLsYzfZjkEAoQeVC_aqyc8GC6RX7dq_KvRAQAWPvkam8VQv4GK5T4ogklEKEvj5ISBamdDNq1n52TpxQwI2EqxSk7I9fKPKhRt4F8-2yETlYvye-2s6NeWJim0KBtOVrk0gWvEDgd6WOqJl_yt5WBISvILNyVg1qAAM8JeX6dRPosahRVDjA52G2X-Tip84wqwyRpUlq2ybzcLh3zyhCitBOebiRWDQfG26EH9lTlJhll-p_Dg8vAXxJLIJ4SNLcqgFeZe4OfHLgdzMvxXZJnPp_VgmkcpUdRotazKZumj6dBPcXI_XID4Z4Z3OM1KrZPJNdUhxw",
"e": "AQAB"
},
{
"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"
}
]
}
UI 设计官方规范
https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple/overview/buttons/
参考文章
Sign in with Apple 流程总结的更多相关文章
- 关于Sign in with Apple 后台验证的一些记录
2019年10月9号 IOS端新增Sign in with Apple IOS真是世界上最垃圾的语言,没有之一,苹果是世界上最垃圾的公司,没有之一 关于Sign in with Apple 苹果官方 ...
- iOS sign in with Apple 苹果ID登录
http://www.cocoachina.com/articles/109104?filter=ios https://juejin.im/post/5deefc5e518825126416611d ...
- API:Sign签名的执行流程
Sign签名存在目的:为了防止不法分子修改参数数据,进而攻击服务器,导致数据泄露或从中获得利益 例如:一个接口是用户把积分转帐给他的朋友,修改后,变为转帐到攻击者的帐户,这样,攻击者就能得到利益 ...
- sign in with apple后端校验(java)
最近新开发的ios平台的app在提审的时候,被拒了,原因是app上如果有接第三方登陆(比如,微信,微博,facebook等),那就必须要接apple id登陆,坑爹~苹果霸权啊!然而没办法,靠他吃饭, ...
- Sign in with apple
UI: https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple/overview/ 审核: h ...
- C# Sign In With Apple苹果登陆后端验证
苹果App授权登录 苹果官方的授权文档: 生成Token:https://developer.apple.com/documentation/sign_in_with_apple/generate_a ...
- iOS 13-Sign In with Apple
最近了解了iOS 13新增功能之Sign In with Apple,Sign In with Apple是跨平台的,可以支持iOS.macOS.watchOS.tvOS.JS.本文主要内容为Sign ...
- ORACLE的sign函数和DECODE函数
比较大小函数 sign 函数语法:sign(n) 函数说明:取数字n的符号,大于0返回1,小于0返回-1,等于0返回0 示例:一.select sign( 100 ),sign(- 100 ),sig ...
- 转载-Oracle ORACLE的sign函数和DECODE函数
原文地址:http://www.cnblogs.com/BetterWF/archive/2012/06/12/2545829.html 转载以备用 比较大小函数 sign 函数语法:sign(n) ...
随机推荐
- Python更新列表
Python更新列表: 使用索引下标进行更新: # 修改列表的第 6 个元素为 d lst = ['a','b','c',1,2,3] lst[5] = 'd' print(lst) # ['a', ...
- PHP usort() 函数
------------恢复内容开始------------ 实例 使用用户自定义的比较函数对数组 $a 中的元素进行排序:Sort the elements of the $a array usin ...
- PHP str_shuffle() 函数
实例 随机地打乱字符串中的所有字符: <?php高佣联盟 www.cgewang.comecho str_shuffle("Hello World");?> 定义和用法 ...
- layer.js : n.on is not a function
当时使用的jQuery为1.4.x的版本.换成高版本就好了. 参考 https://blog.csdn.net/marswill/article/details/69316003
- 关于idea 在创建maven 骨架较慢问题解决
在设置中->maven>runner>VM Options 粘贴 -DarchetypeCatalog=internal 其中 -D archetype:原型,典型的意思 ( ...
- 【HNOI2011】数学作业 题解(递推+矩阵快速幂)
题目链接 题目大意:求$1-n$所拼接起来的数$mod\ m$的值. ----------------------------------- 递推式子很好想:$f_i=f_{i-1}*10^{\lg ...
- IntelliJ IDEA 修改内存大小,使得idea运行更流畅。(转发)
原文地址:https://blog.csdn.net/qq_27093465/article/details/81947933 idea有个配置文件,可以设置内存大小的,就跟咱的jvm的内存里面的堆大 ...
- 记一次maven打包编译文件一直不正确
maven打包发现war包解压后的class文件总是跟原Java不一样 后来发现pom中这么写到 <plugins> <plugin> <artifactId>ma ...
- MPI运行时间测量
转载自:https://blog.csdn.net/silent56_th/article/details/80419314 翻译自:https://stackoverflow.com/questio ...
- ROS 八叉树地图构建 - 使用 octomap_server 建图过程总结!
构建语义地图时,最开始用的是 octomap_server,后面换成了 semantic_slam: octomap_generator,不过还是整理下之前的学习笔记. 一.增量构建八叉树地图步骤 为 ...