PHP服务端如何进行苹果登录的验证

一、材料准备

1、P8文件:苹果后台生成证书那里的key那里生成,这个文件只可以下载一次,保存好

2、生成JWT token 的脚本

二、脚本siwa.rb

ruby 复制代码
#!/usr/bin/env ruby

require 'jwt'
require 'openssl'
require 'optparse'

options = {}

OptionParser.new do |opts|
  opts.banner = "Usage: siwa.rb [options]"

  opts.on("-k", "--key PATH", "Path to the AuthKey file") do |v|
    options[:key] = v
  end
  opts.on("-t", "--team-id TEAM_ID", "Your Apple Team ID") do |v|
    options[:team_id] = v
  end
  opts.on("-b", "--bundle-id BUNDLE_ID", "Your App's Bundle ID") do |v|
    options[:bundle_id] = v
  end
  opts.on("-h", "--help", "Prints this help") do
    puts opts
    exit
  end
end.parse!

if options[:key].nil? || options[:team_id].nil? || options[:bundle_id].nil?
  puts OptionParser.new.help
  exit
end

pem_content = File.read options[:key]

ecdsa_key = OpenSSL::PKey::EC.new pem_content

headers = {
    'kid' => options[:team_id],
}

claims = {
    'iss' => options[:team_id],
    'iat' => Time.now.to_i,
    'exp' => Time.now.to_i + 86400*180,
    'aud' => 'https://appleid.apple.com',
    'sub' => options[:bundle_id],
}

token = JWT.encode claims, ecdsa_key, 'ES256', headers

puts token

三、运行生成token

1、把脚本放在桌面,命令行执行:chmod +x /Users/say/Desktop/siwa.rb

2、cd到桌面,运行:./siwa.rb -h

如果报错:

/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- jwt ( LoadError )

from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'

from ./siwa.rb:3:in `<main>'

说明电脑上没有JWT

3、安装JWT:sudo gem install jwt

4、执行:./siwa.rb -h

终端会输出:

Usage: siwa.rb [options]

-k, --key PATH Path to the AuthKey file

-t, --team-id TEAM_ID Your Apple Team ID

-b, --bundle-id BUNDLE_ID Your App's Bundle ID

-h, --help Prints this help

5、运行:./siwa.rb -k /Users/5T3.p8 -t 684MCOO9T3 -b com.kcys.sx

就会生成JWT 字符串

相关推荐
忧郁的蛋~19 分钟前
.NET异步编程中内存泄漏的终极解决方案
开发语言·前端·javascript·.net
2301_7951672024 分钟前
玩转Rust高级应用. ToOwned trait 提供的是一种更“泛化”的Clone 的功能,Clone一般是从&T类型变量创造一个新的T类型变量
开发语言·后端·rust
hzk的学习笔记27 分钟前
Redisson解锁失败,watchdog会不会一直续期下去?
数据库·redis·缓存
你才是向阳花37 分钟前
如何用Python实现飞机大战小游戏
开发语言·python·pygame
合作小小程序员小小店42 分钟前
web网页开发,在线%商城,电商,商品购买%系统demo,基于vscode,apache,html,css,jquery,php,mysql数据库
开发语言·前端·数据库·mysql·html·php·电商
星释1 小时前
Rust 练习册 :Phone Number与电话号码处理
开发语言·机器学习·rust
one year.1 小时前
Linux:线程同步与互斥
java·开发语言
一 乐1 小时前
旅游|内蒙古景点旅游|基于Springboot+Vue的内蒙古景点旅游管理系统设计与实现(源码+数据库+文档)
开发语言·前端·数据库·vue.js·spring boot·后端·旅游
JaguarJack1 小时前
15 个 Eloquent 高级技巧,瞬间提升你的 Laravel 应用性能
后端·php·laravel
bing.shao1 小时前
如何降低redis哈希值冲突概率
数据库·redis·哈希算法