接入AppleID登录 go语言实现
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。 https://blog.csdn.net/tptpppp/article/details/99288426
概述
本文是對(duì)AppleID登錄接入的相關(guān)總結(jié),希望對(duì)其他人能有幫助。
蘋果在其WWDC19大會(huì)上提出了"Sign In with Apple"的概念,類似于微信一鍵登錄,但也有些區(qū)別:
- 微信存在一個(gè)UnionID、OpenID的概念,蘋果只有一個(gè)AppleID;
- 微信直接通過(guò)api就能拿到用戶信息,而蘋果拿到的是一個(gè)jwt,需要進(jìn)行加解密。
相關(guān)參數(shù)
根據(jù)官方文檔(鏈接見(jiàn)文末),AppleID登錄遵循OAuth2.0協(xié)議,主要分為兩步:1. 用戶授權(quán)后獲取code;2. 通過(guò)code換取token。以下流程在網(wǎng)頁(yè)端和App端存在一定差異,主要是client_id和redirect_url不同,這里以網(wǎng)頁(yè)端為例進(jìn)行說(shuō)明。
在發(fā)起流程前,你需要準(zhǔn)備以下參數(shù):
-
Team ID,10個(gè)字節(jié)的字符串,可以在蘋果賬戶后臺(tái)中看到,位于右上角
-
Key Id,10個(gè)字節(jié)的字符串,可以在蘋果賬戶后臺(tái)中看到
-
Client ID,這里要注意與code授權(quán)的平臺(tái)保持一致。注意網(wǎng)頁(yè)端與app端的差異,參見(jiàn)遇到的問(wèn)題一
-
Private Key,一個(gè).p8文件,只能從蘋果官網(wǎng)下載一次
-
Redirect Url,code授權(quán)的回調(diào)url,app端可以不填
除Redirect Url外,其他幾個(gè)參數(shù)主要用于生成client_secret。根據(jù)官方文檔,client_secret是如下jwt采用ES256加密的結(jié)果:
{"alg": "ES256", // jwt加密算法,固定值"kid": "ABC123DEFG" // Key Id } {"iss": "DEF123GHIJ", // Team ID"iat": 1437179036, // jwt生成時(shí)間,精確到秒"exp": 1493298100, // jwt過(guò)期時(shí)間,unix時(shí)間戳,精確到秒"aud": "https://appleid.apple.com", // 授權(quán)給此域名,固定值"sub": "com.mytest.app" // Client ID }golang實(shí)現(xiàn)
參見(jiàn)代碼
遇到的問(wèn)題
問(wèn)題一 網(wǎng)頁(yè)端/App端Client ID不同
- 現(xiàn)象: {“error”:“invalid_grant”}
- 原因:client_id填寫錯(cuò)誤
網(wǎng)頁(yè)端流程走通后,在調(diào)試App端的過(guò)程中,總是報(bào)錯(cuò)invalid_grant,后來(lái)發(fā)現(xiàn)是client_id填錯(cuò)了。網(wǎng)頁(yè)授權(quán)登錄填寫的是Services Id,App端登錄需要的是AppId,參見(jiàn)鏈接
參考
- 官方文檔
- OAuth 2.0,主要就是code、token、refresh_token的關(guān)系
- jwt
- jwt-go
- 參考一
- 參考二
總結(jié)
以上是生活随笔為你收集整理的接入AppleID登录 go语言实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python time 模块函数
- 下一篇: FTP服务器主动被动模式详解