接入苹果第三方登录流程记录
在网上找到一个中文版的流程图:
我的思路
- app端传入identityToken,解析获取header和paylod
identityToken 是一个 Json Web Token (JWT)。它由点号 (“.”) 分割为三部分:header、payload、signature。前两部分是两个 Json 字符串经过 base64Url 编码的结果。第三部分是前面二者加密后再做 base64Url 编码得到的。
- 获取苹果的公钥,链接: https://appleid.apple.com/auth/keys,会得到有个jsonArray数组,如图:
- 使用第一步从header中解析出来的"kid"去匹配苹果公钥
- 通过苹果公钥中的"n"和"e"生成解析identityToken的签名秘钥
- 解析成功说明鉴权成功,返回解析出来的苹果唯一id; 反之则不然
此处我在解析时,从解析出来的结果中的"aud:bundle id苹果打包名"做了一次匹配,也可以不这么做
代码实例
我将鉴权方法做成一个工具类,可以直接复制代码调用,此处代码需要maven依赖 jjwt 和 hutool工具类 ,不知道的可以到网上去找下依赖
下面代码中出现的TKServiceException类是自定义的异常类,可以替换
import cn.hutool.core.codec.Base64Decoder;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.xiyakj.xiyakj.common.core.exception.TKServiceException;
import io.jsonwebtoken.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import java.math.BigInteger;
import java.security.PublicKey;