本文主要展示golang后台编写苹果一键登录的代码.苹果一键登录的流程需自行去查看相关文档

这是解析 identity_token的方法来验证    如果是用code的话验证 请去 https://blog.csdn.net/tptpppp/article/details/99288426 也是得到苹果的token然后解析出来验证前端传入的user,

package main

import (
"crypto/rsa"
"fmt"
"github.com/astaxie/beego"
"github.com/dgrijalva/jwt-go"
"github.com/lestrrat-go/jwx/jwk"
"net/http"
)

// 解析token
func AppleParseToken(appleToken string) (*jwt.Token, error) {

set, err := jwk.FetchHTTP("https://appleid.apple.com/auth/keys", jwk.WithHTTPClient(http.DefaultClient))
if err != nil {
return nil, err
}
var isSuccess bool
var token *jwt.Token
  
// 苹果这个秘钥有点坑,返回了三个公钥,要对每一个公钥都去进行解析,有一个成功了就行,全失败才算失败,一开始项目只用了其中一个公钥,运气好每次都成功解析出来了,直到上生产环境才测出来这个bug
   for _, key := range set.Keys{
pubKeyIface, _ := key.Materialize()
pubKey, ok := pubKeyIface.(*rsa.PublicKey)
if !ok {
beego.Error(fmt.Errorf(`expected RSA public key from %s`, "https://appleid.apple.com/auth/keys"))
continue
}

token, err = jwt.Parse(appleToken, func(token *jwt.Token) (interface{}, error) {
if _, ok := token.Method.(*jwt.SigningMethodRSA); !ok {
beego.Error(fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]))
}
return pubKey, nil
})

if err != nil {
beego.Warning("Token Parse error:", err)
continue
}
if !token.Valid {
err = errors.New("token 无效")
beego.Warning("token 无效")
continue
}
isSuccess = true
break
}
if isSuccess {
return token, nil
}
return nil, errors.New("token 无效")
}


需要前端传一个苹果用户唯一标识符user 以及identity_token, 将
identity_token 传入函数解析出来,再用
claims := token.Claims.(jwt.MapClaims)
sub := claims["sub"].(string)

然后用sub跟user比较一下不相等的话就代表前端传的user=有问题,相等的话就存下user唯一标识符进行注册就可以了.

golang 后台 苹果一键登录 sing in with apple的更多相关文章

  1. Destoon QQ互联一键登录审核不通过的解决方案

    在QQ互联上申请帐号之后提交了审核, 后台填写APPID和KEY之后自己申请的QQ号可以正常登录,但QQ互联审核的时候一直审核不通过说是“您的网站审核未通过,原因是“点击QQ登录按钮提示登录失败或出现 ...

  2. 通过winform+模拟登录实现快速一键登录到人才招聘网站

    之前为了便于人事部门招聘登录网站更简洁高效,免去每天频繁输网址.用户名.密码等相关登录信息,特基于winform+HttpWebRequest实现模拟请求登录,最终达到一键登录到招聘网站后台的效果. ...

  3. 批处理文件——多个QQ一键登录

    偶然看到有的同学登录PC的QQ,发现他有很多QQ,每登录一个要切换一个,虽然记住了密码,但还是不方便,于是想通过批处理来实现“一键登录”的功能.以下内容为本文假想,如有雷同,实属巧合! 具体的实现步骤 ...

  4. PHP版微信第三方实现一键登录及获取用户信息的方法

    本文实例讲述了PHP版微信第三方实现一键登录及获取用户信息的方法.分享给大家供大家参考,具体如下: 注意,要使用微信在第三方网页登录是需要“服务号”才可以哦,所以必须到官方申请. 一开始你需要进入微信 ...

  5. unapp一键登录

    一.整理思路 un-app官网提供多种实现[一键登录](https://uniapp.dcloud.net.cn/uniCloud/univerify "")的方法,这里的选择是 ...

  6. Redis限制一键登录次数

    一.产生背景 之前的随笔提到过项目中写了一键登录功能.上线后除了有时候网络波动会导致登陆失败,其他情况一直稳如老狗 しかし,邮件看到有人恶意刷一键登录,这年头闲的人可真闲啊, 只能思考如何搞一搞 二. ...

  7. 使用uView UI+UniApp开发微信小程序--微信授权绑定和一键登录系统

    在前面随笔<使用uView UI+UniApp开发微信小程序>和<使用uView UI+UniApp开发微信小程序--判断用户是否登录并跳转>介绍了微信小程序的常规登录处理和验 ...

  8. QQ一键登录功能的实现过程

    QQ登录的思路: 当qq登陆成功后,QQ会给我们返回一个唯一的用户标识:openId,当用户授权QQ时,判断 if(已经有openId){ 跳转到登陆后的页面. }else if(没有openId){ ...

  9. php大力力 [036节] 后台系统的登录页面界面做完啦

    php大力力 [036节] 后台系统的登录页面界面做完啦 我认为做的不错,我就先不上截图啦 要你的祝福 分布注册 Twitter Login Or Signup Form 藤藤每日一练——172个Ic ...

  10. 项目开发-->一键登录功能汇总

    开发网站经常会提供一些一键登录功能,如:QQ.新浪微博.淘宝账号.开心网账号.人人网账号等进行快捷登录,下面记录几个常用的开放平台地址,方便以后开发需要. 1.QQ互联 2.新浪微博 网站接入QQ互联 ...

随机推荐

  1. C#的AOP(最经典实现)

    (适用于.NET/.NET Core/.NET Framework) [目录]0.前言1.第一个AOP程序2.Aspect横切面编程3.一个横切面程序拦截多个主程序4.多个横切面程序拦截一个主程序5. ...

  2. mysql 重新整理——索引优化explain字段介绍一 [九]

    前言 在七种介绍了explain这东西,那么具体来看下它是如何来运行的吧. 正文 id 来看一条语句:EXPLAIN select * from departments,dept_emp,employ ...

  3. linux ssh连接

    前言 整理以前的随笔. 正文 首先更新源 sudo apt-get update 安装ssh服务 sudo apt-get install openssh-server 检测是否已启动 ps -e | ...

  4. Node.js 中的事件循环机制

    一.是什么 在浏览器事件循环中,我们了解到javascript在浏览器中的事件循环机制,其是根据HTML5定义的规范来实现 而在NodeJS中,事件循环是基于libuv实现,libuv是一个多平台的专 ...

  5. gRPC repeated数组的使用 python

    reco.proto syntax = "proto3"; package rpc_package; service HelloWorldService { rpc SayHell ...

  6. Vue——自动切换图片

    利用属性指令 + setInterval(是一个实现定时调用的函数) <!DOCTYPE html> <html lang="en"> <head&g ...

  7. 使用ollama + AnythingLLM快速且简单的在本地部署llm3

    使用ollama + AnythingLLM快速且简单的在本地部署llm3 不多说,直接开始 一.安装ollama ollama官网:https://ollama.com/ 下载地址:https:// ...

  8. 力扣275(jav&python)-H 指数 II(中等)

    题目: 给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数,citations 已经按照 升序排列 .计算并返回该研究者的 h 指数. h ...

  9. 力扣640(java)-求解方程(中等)

    题目: 求解一个给定的方程,将x以字符串 "x=#value" 的形式返回.该方程仅包含 '+' , '-' 操作,变量 x 和其对应系数. 如果方程没有解,请返回 "N ...

  10. 百万TPS高吞吐、秒级低延迟,阿里​搜索离线平台如何实现?

    导读:阿里主搜(淘宝天猫搜索)是搜索离线平台非常重要的一个业务,具有数据量大.一对多的表很多.源表的总数多和热点数据等特性.对于将主搜这种逻辑复杂的大数据量应用迁移到搜索离线平台总是不缺少性能的挑战, ...