ios 登录 java 后台,IOS苹果登录sign in with apple后端校验

IOS苹果登录sign in with apple后端校验

最近新开发的app在IOS平台app store connent提审的时候,被拒了,原因是app上如果有接第三方登陆(比如微信,微博,facebook等),那就必须要接apple id登陆,坑爹~苹果霸权啊!然而没办法,所以只能接入苹果登录。

APP端的接入可以看上一篇博客:iOS苹果授权登录(Sign in with Apple)/Apple登录/苹果登录集成教程,下面我来说一下对接苹果登陆的后端验证模块。

这里先说一下apple id登陆的主要流程和涉及到的一些知识点。首先apple登陆的时序图如下:

先是app和苹果服务器通信获得identitytoken,然后把identitytoken交给业务后台验证,验证通过就可以了。其中appServer涉及到的验证,就是identitytoken,其实identitytoken就是一个jws,至于校验jws,其实是有现成的jar包可以实现,验证jws的签名,保证数据没有被篡改之后,还要校验从identitytokendecode出来的nonce,iss,aud,exp,主要是iss和exp这两个。下面我直接上代码:

一、苹果登录JAVA后台校验:JWT的identityToken验证模式

话不多说直接上代码:

1、app端请求appleServer返回的identityToken

"identityToken":"ZXlKcmFXUWlPaUpsV0dGMWJtMU1JaXdpUndje***xMXpZZ3BiYWRIWHdGVEtR4ejRPZTBhUkdtcHZOZFpWVkJGQjN4OU13"

就是一个JWT的token

2、有2次验证,分别调取apple提供的接口即可

private final String APPLE_AUTH_URL = "https://appleid.apple.com/auth/keys";

private final String ISS = "https://appleid.apple.com";

一次是利用token获取解密的publicKey;另一次就是再校验这个publicKey。

代码如下:

public boolean verify(AppleLoginVO appleLoginVO) {

//这里传过来的identityToken应该是三个.分割,解密之后

String identityToken = appleLoginVO.getIdentityToken();

try {

if (identityToken.split("\\.").length 1){

String firstDate = new String( Base64.decodeBase64(identityToken.split("\\.")[0]),"UTF-8");

String claim = new String(Base64.decodeBase64(identityToken.split("\\.")[1]), "UTF-8");

String kid = JSONObject.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值