sign-in-with-apple

command module
v0.0.0-...-8f64b7b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 13, 2020 License: MIT Imports: 11 Imported by: 0

README

版权声明:本文为原创文章,未经允许不得转载。 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,参见链接

参考

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL