实现原理:

1、安装外部库php-jwt,在项目的composer.json 同级目录下运行

composer require firebase/php-jwt

执行失败的话可借鉴本文:https://blog.csdn.net/qq_24909089/article/details/106055699

2、

<?php
/*** 苹果验证类* Date: 2019/9/11*/use Firebase\JWT\JWK;
use Firebase\JWT\JWT;const AUTH_KEYS_URL = 'https://appleid.apple.com/auth/keys'; //获取Apple公钥访问地址class Vendor_Interface_Apple
{/*** 验证token是否正常* 验证准确性:通过Apple公钥在线(https://8gwifi.org/jwkconvertfunctions.jsp)得到用于解密的pem公钥字符串* @param string $identityToken 前端获取的token* @return bool|object* @throws \Firebase\JWT\InvalidArgumentException*/public function apple_jwt_verify($identityToken = ''){if(!$identityToken){return false;}//取得下标值$subscript = 0;//获取apple认证秘钥 :https://appleid.apple.com/auth/keys$public_key = $this->curl_request(AUTH_KEYS_URL);if ($public_key['code'] != 200) {return false;}$alg = $public_key['data']['keys'][$subscript]['alg'];$kid = $public_key['data']['keys'][$subscript]['kid'];//获取公钥$pem = JWK::parseKeySet($public_key['data']);//返回包含密钥详情的数组$publicKey = openssl_pkey_get_details($pem[$kid]);//        print_r($publicKey);
//        exit;$decoded = JWT::decode($identityToken, $publicKey['key'], [$alg]);return $decoded;}/*** curl请求* @param $url* @param string $type* @param string $post_data* @return array*/public function curl_request($url, $type = 'GET', $post_data = ''){$curl    = curl_init();$aHeader = Array();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);if ($type == 'POST') {$aHeader[] = 'Content-type: application/json';curl_setopt($curl, CURLOPT_POST, 1);curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);}if (!empty($aHeader)) {curl_setopt($curl, CURLOPT_HTTPHEADER, $aHeader);}curl_setopt($curl, CURLOPT_TIMEOUT, 120);curl_setopt($curl, CURLOPT_HEADER, 0);curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);$result    = curl_exec($curl);$info      = curl_getinfo($curl);$error_no  = curl_errno($curl);$error_str = curl_error($curl);curl_close($curl);$result_array = json_decode($result, true);if ($info["http_code"] == 200) {$data = array("code" => $info["http_code"],"data" => $result_array);} else {$data = array("code" => $info["http_code"],"data" => Array('time'      => date('Y-m-d H:i:s', time()),'type'      => $type,'url'       => $url,'post_data' => $post_data,'code'      => $info["http_code"],'body'      => $result_array,'error_no'  => $error_no,'error_str' => $error_str));}return $data;}}

苹果官网文档:https://developer.apple.com/documentation/sign_in_with_apple/generate_and_validate_tokens

PHP 实现 apple 苹果快捷登录相关推荐

  1. Apple Sign in with Apple(苹果授权登录PHP)

    Apple Sign in with Apple(苹果授权登录PHP) 文章目录 Apple Sign in with Apple(苹果授权登录PHP) 一.登录Apple Developer 二.创 ...

  2. 苹果apple账号授权登录第三方APP

    Apple官方文档 前言:由于公司最近有个业务需求是要进行Apple账号授权登录,于是我看边看文档边借鉴其他人的写法,发现好多文章都有一个共性,一个是在解析JWT的时候自己设置参数后进行判断,这样做没 ...

  3. 苹果账户登录_iOS 13的通过 Apple 登录第三方应用

    在 iOS 13多了一个Sign in with Apple,就是苹果账号登录,通过苹果账户来第三方登录,例如微信.QQ.微博的快速登录,那么是否有那么神奇呢. 通过 Apple 登录 使用 Appl ...

  4. Sign in With Apple (苹果授权登录)

    Sign in With Apple (苹果授权登录) 关于Sign in With Apple (苹果授权登录)的问题,公司app上架appStore被拒原因是使用第三方授权登陆但是却没有使用苹果账 ...

  5. 苹果授权登录Sign In With Apple亲测通过版[100%成功]

    苹果授权登录Sign In With Apple后台代码实现JAVA版本亲测通过版 废话不多说,直接复制把自己的包名写上就可以用了 有个别的小坑,HttpUtil自己写,没附上 Base64一定要用o ...

  6. Sign In with Apple - 使用苹果账号登录你的应用

    编辑:老峰,作者:KANGZUBIN 来源:小专栏<WWDC19 内参> 苹果在 9 月 12 号更新了审核指南,加入 4.8 Sign in with Apple 一条,要求所有使用 第 ...

  7. iOS 苹果授权登录(Sign in with Apple)

    在 iOS13 中,如果 App 提供第三方登录,就必须添加 苹果登录 Sign in with Apple 选项,并要求所有开发者于 2020年4月之前 完成现有应用的更新,否则审核不给通过. iO ...

  8. iOS 苹果授权登录(Sign in with Apple)系列之Apple Developer配置篇

    原文 在 iOS13 中,如果 App 提供第三方登录,就必须添加 苹果登录 Sign in with Apple 选项,并要求所有开发者于 2020年4月之前 完成现有应用的更新,否则审核不给通过. ...

  9. php Sign in with Apple(苹果授权登录PHP后端接口)

    详细配置参考:https://developer.okta.com/blog/2019/06/04/what-the-heck-is-sign-in-with-apple 本文主要参考: https: ...

最新文章

  1. 安卓蓝牙键盘按键映射_双层按键功能自定义:魔蛋68蓝牙双模机械键盘体验
  2. springboot使用hibernate validator校验
  3. 【Groovy】Groovy 脚本调用 ( Java 类中调用 Groovy 脚本 )
  4. 一个算法对于某个输入的循环次数是可以事先估计出来的_结合各路博客的EM算法理解...
  5. >mysql -uroot -p Enter password: ERROR 1045 (28000): Access denied ,被mysql连接问题折磨到问题解决,分享
  6. 计算机窗口设计java实验,Java银行取款异常处理计算器设计图形用户界面设计实验报告.doc...
  7. eclipse 安装python开发工具 PyDev
  8. dpdk中文-dpdk虚拟机出错
  9. 什么是事实表和维度表?什么是维度和度量?
  10. MySQL数据库 1067号错误的解决办法
  11. kotlin android 开源,一款纯Kotlin编写的开源安卓应用 Smile
  12. 20200329——剑指offer 面试题49:丑数
  13. Axure导入元件库的两种方式-附完整元件库
  14. ArcGIS教程:ArcGIS中的报表
  15. 如何使用Mac的媒体键在DisplayPort,HDMI或Thunderbolt监视器上调整扬声器音量
  16. 【C#】字符串倒序输出
  17. ECU故障诊断系统概述
  18. 什么是云计算,来源百度百科
  19. Ubuntu 分区误删,如何恢复?
  20. JVM 主要组成部分及其作用

热门文章

  1. BeanUtils.populate(Object Bean,Map properties)
  2. contiki STM32移植
  3. qt webview 忽略 ssl错误 ignoreSslErrors
  4. [数据安全]数据防泄密建设
  5. 腾讯全民wifi linux,Linux下安装MT7601U无线网卡驱动
  6. 2022.10.27
  7. php mysql函数未定义,关于php:Wierd和Annoying错误:调用未定义的函数mysql_query()...
  8. 阿里巴巴全球化测试技术介绍
  9. sxt_(001_002)_web简介
  10. 对四元数解算姿态的理解