PHP 实现 apple 苹果快捷登录
实现原理:
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 苹果快捷登录相关推荐
- Apple Sign in with Apple(苹果授权登录PHP)
Apple Sign in with Apple(苹果授权登录PHP) 文章目录 Apple Sign in with Apple(苹果授权登录PHP) 一.登录Apple Developer 二.创 ...
- 苹果apple账号授权登录第三方APP
Apple官方文档 前言:由于公司最近有个业务需求是要进行Apple账号授权登录,于是我看边看文档边借鉴其他人的写法,发现好多文章都有一个共性,一个是在解析JWT的时候自己设置参数后进行判断,这样做没 ...
- 苹果账户登录_iOS 13的通过 Apple 登录第三方应用
在 iOS 13多了一个Sign in with Apple,就是苹果账号登录,通过苹果账户来第三方登录,例如微信.QQ.微博的快速登录,那么是否有那么神奇呢. 通过 Apple 登录 使用 Appl ...
- Sign in With Apple (苹果授权登录)
Sign in With Apple (苹果授权登录) 关于Sign in With Apple (苹果授权登录)的问题,公司app上架appStore被拒原因是使用第三方授权登陆但是却没有使用苹果账 ...
- 苹果授权登录Sign In With Apple亲测通过版[100%成功]
苹果授权登录Sign In With Apple后台代码实现JAVA版本亲测通过版 废话不多说,直接复制把自己的包名写上就可以用了 有个别的小坑,HttpUtil自己写,没附上 Base64一定要用o ...
- Sign In with Apple - 使用苹果账号登录你的应用
编辑:老峰,作者:KANGZUBIN 来源:小专栏<WWDC19 内参> 苹果在 9 月 12 号更新了审核指南,加入 4.8 Sign in with Apple 一条,要求所有使用 第 ...
- iOS 苹果授权登录(Sign in with Apple)
在 iOS13 中,如果 App 提供第三方登录,就必须添加 苹果登录 Sign in with Apple 选项,并要求所有开发者于 2020年4月之前 完成现有应用的更新,否则审核不给通过. iO ...
- iOS 苹果授权登录(Sign in with Apple)系列之Apple Developer配置篇
原文 在 iOS13 中,如果 App 提供第三方登录,就必须添加 苹果登录 Sign in with Apple 选项,并要求所有开发者于 2020年4月之前 完成现有应用的更新,否则审核不给通过. ...
- php Sign in with Apple(苹果授权登录PHP后端接口)
详细配置参考:https://developer.okta.com/blog/2019/06/04/what-the-heck-is-sign-in-with-apple 本文主要参考: https: ...
最新文章
- 安卓蓝牙键盘按键映射_双层按键功能自定义:魔蛋68蓝牙双模机械键盘体验
- springboot使用hibernate validator校验
- 【Groovy】Groovy 脚本调用 ( Java 类中调用 Groovy 脚本 )
- 一个算法对于某个输入的循环次数是可以事先估计出来的_结合各路博客的EM算法理解...
- >mysql -uroot -p Enter password: ERROR 1045 (28000): Access denied ,被mysql连接问题折磨到问题解决,分享
- 计算机窗口设计java实验,Java银行取款异常处理计算器设计图形用户界面设计实验报告.doc...
- eclipse 安装python开发工具 PyDev
- dpdk中文-dpdk虚拟机出错
- 什么是事实表和维度表?什么是维度和度量?
- MySQL数据库 1067号错误的解决办法
- kotlin android 开源,一款纯Kotlin编写的开源安卓应用 Smile
- 20200329——剑指offer 面试题49:丑数
- Axure导入元件库的两种方式-附完整元件库
- ArcGIS教程:ArcGIS中的报表
- 如何使用Mac的媒体键在DisplayPort,HDMI或Thunderbolt监视器上调整扬声器音量
- 【C#】字符串倒序输出
- ECU故障诊断系统概述
- 什么是云计算,来源百度百科
- Ubuntu 分区误删,如何恢复?
- JVM 主要组成部分及其作用
热门文章
- BeanUtils.populate(Object Bean,Map properties)
- contiki STM32移植
- qt webview 忽略 ssl错误 ignoreSslErrors
- [数据安全]数据防泄密建设
- 腾讯全民wifi linux,Linux下安装MT7601U无线网卡驱动
- 2022.10.27
- php mysql函数未定义,关于php:Wierd和Annoying错误:调用未定义的函数mysql_query()...
- 阿里巴巴全球化测试技术介绍
- sxt_(001_002)_web简介
- 对四元数解算姿态的理解