疯狂编程网

  • 首页
  • 后端
    • GOLANG
    • PHP
  • 前端
  • 客户端
  • 服务器
  • AIGC
  • 开发工具
  • 代码人生
  • 关于本站
    • 联系我们
    • 免责声明
  1. 首页
  2. 后端
  3. GOLANG
  4. 正文

苹果登录调用API时client_secret生成golang语言的实现方式

2023年6月14日 2695点热度 0人点赞 0条评论

因为PC端的业务要做apple登录,需要获取用户的appleid,调用苹果API的时候要生成jwt格式的client_secret,go语言的实现如下:

1 创建client_id,授权文件等,具体创建方式参考:https://www.icrazycode.com/archives/1257

2 将下载的 p8 证书文件转 pkcs8 pem

openssl pkcs8 -nocrypt -in AuthKey_U7BAXSKVQ7.p8 -out SubscriptionKey.pem
openssl pkcs8 -topk8 -inform PEM -outform DER -in SubscriptionKey.pem -nocrypt > AuthKey_U7BAXSKVQ7.pem

3 代码如下

package appleid

import (
	"crypto/tls"
	"crypto/x509"
	"encoding/json"
	"errors"
	"fmt"
	"github.com/golang-jwt/jwt/v5"
	"io/ioutil"
	"net/http"
	"os"
	"path/filepath"
	"strings"
	"time"
)

const APPLE_AUTH_TOKEN_URL = "https://appleid.apple.com/auth/token"


func GenerateClientSecret(clientID, teamID, keyID, authKeyFile string) (string, error) {
	appleUser := AppleUser{}
	appleUser.Subject = clientID
	appleUser.Issuer = teamID
	appleUser.IssuedAt = jwt.NewNumericDate(time.Now())
	appleUser.NotBefore = jwt.NewNumericDate(time.Now())
	appleUser.ExpiresAt = jwt.NewNumericDate(time.Now().Add(24 * time.Hour))
	appleUser.Audience = []string{"https://appleid.apple.com"}
	claims := jwt.NewWithClaims(jwt.SigningMethodES256, appleUser)
	claims.Header["kid"] = keyID
	path, _ := os.Getwd()
	authFile := filepath.Join(path, "config", authKeyFile)//文件的存放目录
	privatePem, _ := os.ReadFile(authFile)
	ecdsaKey, _ := x509.ParsePKCS8PrivateKey(privatePem)
	signString, err := claims.SignedString(ecdsaKey)
	if err != nil {
		return "", err
	}
	return signString, nil
}
标签: golang ios jwt
最后更新:2023年6月14日

大明

靠写代码养家的开发者。

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2023 疯狂编程网. ALL RIGHTS RESERVED.

京ICP备2022013580号-1