接入AppleID登录 go语言实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tptpppp/article/details/99288426

概述

本文是对AppleID登录接入的相关总结,希望对其他人能有帮助。

苹果在其WWDC19大会上提出了"Sign In with Apple"的概念,类似于微信一键登录,但也有些区别:

  • 微信存在一个UnionID、OpenID的概念,苹果只有一个AppleID;
  • 微信直接通过api就能拿到用户信息,而苹果拿到的是一个jwt,需要进行加解密。

相关参数

根据官方文档(链接见文末),AppleID登录遵循OAuth2.0协议,主要分为两步:1. 用户授权后获取code;2. 通过code换取token。以下流程在网页端和App端存在一定差异,主要是client_id和redirect_url不同,这里以网页端为例进行说明。

在发起流程前,你需要准备以下参数:

  • Team ID,10个字节的字符串,可以在苹果账户后台中看到,位于右上角

  • Key Id,10个字节的字符串,可以在苹果账户后台中看到

  • Client ID,这里要注意与code授权的平台保持一致。注意网页端与app端的差异,参见遇到的问题一

  • Private Key,一个.p8文件,只能从苹果官网下载一次

  • Redirect Url,code授权的回调url,app端可以不填

除Redirect Url外,其他几个参数主要用于生成client_secret。根据官方文档,client_secret是如下jwt采用ES256加密的结果:

{
    "alg": "ES256",                         // jwt加密算法,固定值
    "kid": "ABC123DEFG"                     // Key Id
}
{
    "iss": "DEF123GHIJ",                    // Team ID
    "iat": 1437179036,                      // jwt生成时间,精确到秒
    "exp": 1493298100,                      // jwt过期时间,unix时间戳,精确到秒
    "aud": "https://appleid.apple.com",     // 授权给此域名,固定值
    "sub": "com.mytest.app"                 // Client ID
}

golang实现

参见代码

遇到的问题

问题一 网页端/App端Client ID不同

  • 现象: {“error”:“invalid_grant”}
  • 原因:client_id填写错误

网页端流程走通后,在调试App端的过程中,总是报错invalid_grant,后来发现是client_id填错了。网页授权登录填写的是Services Id,App端登录需要的是AppId,参见链接

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值