Uniapp---苹果授权登录【PHP服务端】

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

原文地址:https://www.cnblogs.com/e0yu/p/14718168.html