golang 后台 苹果一键登录 sing in with apple

本文主要展示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
}
pubKeyIface, _ := set.Keys[0].Materialize()
pubKey, ok := pubKeyIface.(*rsa.PublicKey)
if !ok {
return nil, fmt.Errorf(`expected RSA public key from %s`, "https://appleid.apple.com/auth/keys")
}

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

if err != nil {
beego.Warning("Token Parse error:", err)
return nil, err
}
if !token.Valid {
err = fmt.Errorf("token 无效")
beego.Warning("token 无效")
return nil, err
}
return token, nil
}

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

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

猜你喜欢

转载自www.cnblogs.com/xcx-bwt/p/12179321.html