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) ...
随机推荐
- pandas_处理异常值缺失值重复值数据差分
# 处理异常值缺失值重复值数据差分 import pandas as pd import numpy as np import copy # 设置列对齐 pd.set_option("dis ...
- PHP uksort() 函数
------------恢复内容开始------------ 实例 使用用户自定义的比较函数对数组 $arr 中的元素按键名进行排序: <?phpfunction my_sort($a,$b){ ...
- PHP jdmonthname() 函数
------------恢复内容开始------------ 实例 返回 1998 年 1 月 13 日这天的格利高里历法的月份简写字符串: <?php$jd=gregoriantojd(1,1 ...
- PHP timezone_version_get() 函数
------------恢复内容开始------------ 实例 返回时区数据库的版本: <?phpecho timezone_version_get();?> 运行实例 » 定义和用法 ...
- PHP preg_last_error() 函数
preg_last_error 函数用于返回最后一个 PCRE 正则执行产生的错误代码.高佣联盟 www.cgewang.com 语法 int preg_last_error ( void ) 实例 ...
- 加密模块hashlib模块(* *)
用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 越往后加密算法越复杂,这些算法都是不可逆的,MD5 算法 ...
- 解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)...
在IDEA中将xxxMapper.xml文件创建在(src/main/java)目录中,运行报错:org.apache.ibatis.binding.BindingException: Invalid ...
- Iconfont的代码使用
1.Iconfont官网 相关阅读: Iconfont-阿里巴巴矢量图标库 Iconfont-阿里巴巴矢量图标库-代码使用 2.下载代码 注意到把鼠标悬停到图标上,会出现三个按钮. 我们点击" ...
- 【译】gRPC-Web for .NET now available
.NET 的 gRPC-Web 现在正式发布了.我们在一月份发布了实验版,从那时起,我们就根据早期的用户反馈进行着改进. 有了这个版本,gRPC-Web 就变成了 grpc-dotnet 项目的一个完 ...
- 基于Linux系统geth的安装
转载地址 https://blog.csdn.net/qq_36124194/article/details/83658580 基于Linux系统geth的安装 安装ethereum sudo apt ...