在使用Uniapp做蘋果授權登錄,那么服務端的代碼怎么寫呢?下面是PHP服務端的具體寫法:
JAVA可以參考:
https://blog.csdn.net/wpf199402076118/article/details/99677412
蘋果提供了兩種驗證方式,一種是基於 JWT 的算法驗證,另外一種是基於 授權碼 的驗證,這里再提供第三種“取巧”的驗證方式即“不驗證模式”。
不驗證模式
后端只需要接收App端提交的以下參數(user、email 為Apple返回給App的參數名)
user: 授權的用戶唯一標識,該值在同一個開發者賬號下的所有 App 下是一樣的,開發者可以用該唯一標識符與自己后台系統的賬號體系綁定起來
email: 郵箱,只有第一次 授權蘋果才會給 App 返回郵箱信息,之后登錄不再返回
fullName: 用戶信息,只有第一次 授權蘋果才會給 App 返回用戶信息,之后登錄不再返回
開發者只要判斷 數據庫 是否存在 user(授權的用戶唯一標識) 存在就返回登錄成功信息,不存在即在數據庫插入 user、email、fullName等信息(業務邏輯根據具體需求調整)
教程到此結束,后面不用看了
驗證模式
蘋果授權登錄(Sign in with Apple)后端驗證
基於 JWT 的驗證
Sign in with Apple 后端 JWT 驗證文檔:
https://developer.apple.com/documentation/signinwithapplerestapi/fetch_apple_s_public_key_for_verifying_token_signature
使用指南:
后端只需要接收 App 端提交的以下參數(user、email 為Apple返回給App的參數名)
userID: 授權的用戶唯一標識,該值在同一個開發者賬號下的所有 App 下是一樣的,開發者可以用該唯一標識符與自己后台系統的賬號體系綁定起來
email: 郵箱,只有第一次 授權蘋果才會給 App 返回郵箱信息,之后登錄不再返回
fullName: 用戶信息,只有第一次 授權蘋果才會給 App 返回用戶信息,之后登錄不再返回
authorizationCode: 授權 code(沒用到)
identityToken: 授權用戶的 JWT 憑證
如何驗證:
1、安裝 php-apple-signin 庫
composer require griffinledingham/php-apple-signin
需要php7.2及以上的版本,需要低於這個版本,需要修改源碼,源碼地址:
https://github.com/GriffinLedingham/php-apple-signin
2、驗證JWT
public function jwtApple(Request $request) { // 授權的用戶唯一標識 $user = $request->input('user'); // 郵箱 $email = $request->input('email'); // 用戶信息 $fullName = $request->input('fullName'); // 授權code 並沒有用到 $authorizationCode = $request->input('authorizationCode'); // 授權用戶的JWT憑證 $identityToken = $request->input('identityToken'); $appleSignInPayload = ASDecoder::getAppleSignInPayload($identityToken); $isValid = $appleSignInPayload->verifyUser($user); // 當 $isValid 為 true 時驗證通過,后續邏輯根據需求編寫 dd($isValid); }
基於授權碼的驗證:
Sign in with Apple 后端 授權碼 驗證文檔:
https://developer.apple.com/documentation/signinwithapplerestapi/generate_and_validate_tokens
其中 iss 和 kid 的獲取方式: