在使用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 的获取方式: