Golang 实现 Apple 登录服务器验证

使用 git 上面的包

"github.com/Timothylock/go-signin-with-apple/apple"


示例代码

var (
      clientId    = "xxxxxxx" // 这个就是 app 的 bundleID
      teamId      = "ZTxxxxxxxxx" 
      keyId       = "Kxxxxxxxx"
      secret      = `
-----BEGIN PRIVATE KEY-----
.........
-----END PRIVATE KEY-----
`
   )
   authCode := c.PostForm("auth_code") // app 调用苹果登陆成功返回的 auth_code
   
   // 初始化客户端
   secret, err := apple.GenerateClientSecret(secret, teamId, clientId, keyId)
   client := apple.New()
   vReq := apple.AppValidationTokenRequest{
      ClientID:     clientId,
      ClientSecret: secret,
      Code:         authCode,
   }

   // 请求 apple 验证 auth_code
   var resp apple.ValidationResponse
   err = client.VerifyAppToken(context.Background(), vReq, &resp)
   if err != nil {
      fmt.Println("error verifying: " + err.Error()) // 签名错误
      return
   }
   if resp.Error != "" {
      fmt.Println("apple returned an error: " + resp.Error) // auth_code 校验失败
      return
   }

   // 获取用户的唯一标识 unique
   unique, err := apple.GetUniqueID(resp.IDToken)
   if err != nil {
      fmt.Println("failed to get unique ID: " + err.Error())
      return
   }

   // 获取用户 email
   claim, err := apple.GetClaims(resp.IDToken)
   if err != nil {
      fmt.Println("failed to get claims: " + err.Error())
      return
   }
   
   fmt.Println(unique) // 用户唯一标识
   fmt.Println((*claim)["email"]) // 用户 email
   fmt.Println((*claim)["email_verified"]) // 用户 email 是否验证锅


整体流程比较简单,这里说下 teamId、keyId、secret 这三个参数怎么获取


登陆 苹果开发者中心 , 

选择 Certificates, Identtifiers & Profiles 

选择 Keys 

点击 + , 输入 Key Name

勾选 Sign in with Apple, 点击右面的 Configure,选择自己的 bundleID

点击 Continue

Keys 已经创建好,这里已经显示 Key ID

teamID 如图

secret 点击右上角 Downlod 下载

2909
0
2年前