苹果授权登录Sign In With Apple亲测通过版[100%成功]
苹果授权登录Sign In With Apple后台代码实现JAVA版本亲测通过版
废话不多说,直接复制把自己的包名写上就可以用了
有个别的小坑,HttpUtil自己写,没附上
Base64一定要用org.apache.commons.codec.binary.Base64其它的会报错
小提示:苹果的公钥可能是固定的,可以自己实现一个缓存提高授权速度
pom.xml
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version>
</dependency>
package com.;import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.haojiao.init.utils.HttpUtil;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.JwtParser;
import io.jsonwebtoken.Jwts;
import org.apache.commons.codec.binary.Base64;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.Base64Utils;import java.math.BigInteger;
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.RSAPublicKeySpec;
import java.util.HashMap;public class SignInWithApple {private static Logger logger = LoggerFactory.getLogger(SignInWithApple.class);@Testpublic void main(){verify("1.2.3");}/*** 解密个人信息** @param identityToken APP获取的identityToken** @return 解密参数:失败返回null sub就是用户id,用户昵称需要前端传过来*/public static JSONObject verify(String identityToken) {try {String[] identityTokens = identityToken.split("\\.");String token0 = new String(Base64Utils.decodeFromString(identityTokens[0]), "UTF-8");String token1 = new String(Base64Utils.decodeFromString(identityTokens[1]), "UTF-8");JSONObject data0 = JSONObject.parseObject(token0);JSONObject data1 = JSONObject.parseObject(token1);String aud = (String) data1.get("aud");String sub = (String) data1.get("sub");if (verify(data0,identityToken, aud, sub)) {return data1;}} catch (Exception e) {logger.info("verify(*) error ",e);}return null;}/*** 验证** @param identityToken APP获取的identityToken* @param aud 您在您的Apple Developer帐户中的client_id* @param sub 用户的唯一标识符对应APP获取到的:user* @return true/false*/private static boolean verify(JSONObject token0,String identityToken, String aud, String sub) {try {PublicKey publicKey = getPublicKey(token0);if (publicKey==null){return false;}JwtParser jwtParser = Jwts.parser().setSigningKey(publicKey);jwtParser.requireIssuer("https://appleid.apple.com");jwtParser.requireAudience(aud);jwtParser.requireSubject(sub);Jws<Claims> claim = jwtParser.parseClaimsJws(identityToken);if (claim != null && claim.getBody().containsKey("auth_time")) {return true;}} catch (Exception e) {logger.info("verify(*,*,*) error ", e);}return false;}private static PublicKey getPublicKey(JSONObject token0) {try {String str = HttpUtil.get("https://appleid.apple.com/auth/keys", new HashMap<>());JSONObject data = JSONObject.parseObject(str);JSONArray jsonArray = data.getJSONArray("keys");for (int i = 0; i <jsonArray.size() ; i++) {JSONObject o = jsonArray.getJSONObject(i);String kid = o.getString("kid");if (kid.equals(token0.getString("kid"))){String n = o.getString("n");String e = o.getString("e");BigInteger modulus = new BigInteger(1, Base64.decodeBase64(n));BigInteger publicExponent = new BigInteger(1, Base64.decodeBase64(e));RSAPublicKeySpec spec = new RSAPublicKeySpec(modulus, publicExponent);KeyFactory kf = KeyFactory.getInstance("RSA");return kf.generatePublic(spec);}}} catch (Exception e) {logger.info("getPublicKey error ", e);}return null;}}
打个广告,是好人就用微信扫一下,额度大,利息低,按天收~
请勿转载:来自
CSDN
苹果授权登录Sign In With Apple亲测通过版[100%成功]相关推荐
- ios 登录 java 后台,IOS苹果登录sign in with apple后端校验
IOS苹果登录sign in with apple后端校验 最近新开发的app在IOS平台app store connent提审的时候,被拒了,原因是app上如果有接第三方登陆(比如微信,微博,fac ...
- Apple Sign in with Apple(苹果授权登录PHP)
Apple Sign in with Apple(苹果授权登录PHP) 文章目录 Apple Sign in with Apple(苹果授权登录PHP) 一.登录Apple Developer 二.创 ...
- Sign in With Apple (苹果授权登录)
Sign in With Apple (苹果授权登录) 关于Sign in With Apple (苹果授权登录)的问题,公司app上架appStore被拒原因是使用第三方授权登陆但是却没有使用苹果账 ...
- iOS 苹果授权登录(Sign in with Apple)
在 iOS13 中,如果 App 提供第三方登录,就必须添加 苹果登录 Sign in with Apple 选项,并要求所有开发者于 2020年4月之前 完成现有应用的更新,否则审核不给通过. iO ...
- iOS 苹果授权登录(Sign in with Apple)系列之Apple Developer配置篇
原文 在 iOS13 中,如果 App 提供第三方登录,就必须添加 苹果登录 Sign in with Apple 选项,并要求所有开发者于 2020年4月之前 完成现有应用的更新,否则审核不给通过. ...
- php Sign in with Apple(苹果授权登录PHP后端接口)
详细配置参考:https://developer.okta.com/blog/2019/06/04/what-the-heck-is-sign-in-with-apple 本文主要参考: https: ...
- iOS 苹果登录 Sign in with apple Swift
iOS 苹果登录 Sign in with apple Swift 话不多说,直接看功能类,解释代码里有 import UIKit import AuthenticationServices @ava ...
- Java Apple_GitHub - izhaorui/AppleLogin-java: 苹果登录 Sign in with Apple 服务端校验
APP端苹果登录java后端校验 主要校验苹果授权登录token 是否正确 主要方法 public RSAPublicKeySpec build(final String n, final Strin ...
- 【JAVA】对接苹果授权登录流程
背景 苹果公司要求所有使用第三方登录的 App,都必须接入Sign in with Apple. 接入方式 基于JWT identityToken的算法验证 基于授权码的验证 校验流程 上图为苹果对接 ...
最新文章
- POJ 2528 Mayor's posters(线段树)
- nstimer循环引用_NSTimer定时器进阶——详细介绍,循环引用分析与解决
- Jmeter自定义函数和引入外部文件的几种方法
- 自己写的一个简单的购物车的登录购买
- spark.mllib:bagging方法
- Opportunity retrieval in SalesPipeline
- 华为荣耀畅玩7c计算机在那,华为荣耀畅玩7C内存多大
- *【CodeForces - 195B】After Training (多解,模拟)
- golang日志输出
- Netty(三) 什么是 TCP 拆、粘包?如何解决?
- HDU 4379 水题,大水,但我WA了很多次,做了很久
- 深度学习自学(三十七):基于用户自定义要求3D房间自动设计研究
- 我的Java开发学习之旅------Java经典排序算法之冒泡排序
- 深度学习——卷积神经网络(CNN)
- C++实现化学方程式配平
- python erp操作_谈OpenERP部署环境操作步骤
- 高中数学集合知识点小题解题方法
- java+epub+阅读器_java – 转到epub阅读器页面(PageTurner)
- linux动态监控系统
- 华为HarmonyOS鸿蒙2.0系统安装谷歌框架play商店GMS,mate30/40系列,p40,p50,nova5 6 7 8,荣耀30/40/50/magic3/9x