由IOS端传过来code

服务端代码

import java.security.KeyFactory;

import java.security.PrivateKey;

import java.security.spec.PKCS8EncodedKeySpec;

import java.util.Base64;

import java.util.Collections;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import com.alibaba.fastjson.JSONObject;

import com.auth0.jwt.JWT;

import com.auth0.jwt.interfaces.DecodedJWT;

import io.jsonwebtoken.Jwts;

import io.jsonwebtoken.SignatureAlgorithm;

public class AppleLoginController {

/**

* 苹果授权登录

*

* @param code

* @param subject

* @return

* @throws Exception

*/

@GetMapping("/authCode")

public void authCode(String code) throws Exception {

String client_id = "com.**.**"; // 被授权的APP ID

Map<String, Object> header = new HashMap<String, Object>();

header.put("kid", "***"); // 参考后台配置

Map<String, Object> claims = new HashMap<String, Object>();

claims.put("iss", "***"); // 参考后台配置 team id

long now = System.currentTimeMillis() / 1000;

claims.put("iat", now);

claims.put("exp", now + 86400 * 30); // 最长半年,单位秒

claims.put("aud", "https://appleid.apple.com"); // 默认值

claims.put("sub", client_id);

PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(readKey());

KeyFactory keyFactory = KeyFactory.getInstance("EC");

PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);

String client_secret = Jwts.builder().setHeader(header).setClaims(claims)

.signWith(SignatureAlgorithm.ES256, privateKey).compact();

String url = "https://appleid.apple.com/auth/token";

// POST 请求

Map<String, String> params = new HashMap<String, String>();

Map<String, String> headers = new HashMap<String, String>();

headers.put("Content-Type", "application/x-www-form-urlencoded");

params.put("client_id", client_id);

params.put("client_secret", client_secret);

params.put("code", code);

params.put("grant_type", "authorization_code");

params.put("redirect_uri", "");

HttpClientResult httpClientResult = HttpClientUtil.doPost(url, headers, params);

Map<String, Object> jsonObject = JSONObject.parseObject(httpClientResult.getContent());

DecodedJWT jwtString = JWT.decode(jsonObject.get("id_token").toString());

String sub = jwtString.getSubject();

}

private byte[] readKey() throws Exception {

String temp = "*******";//记得去掉换行符号,密钥

return Base64.getDecoder().decode(temp);

}

}

jar包依赖

<dependency>

<groupId>io.jsonwebtoken</groupId>

<artifactId>jjwt</artifactId>

<version>0.7.0</version>

</dependency>

<!-- https://mvnrepository.com/artifact/com.auth0/java-jwt -->

<dependency>

<groupId>com.auth0</groupId>

<artifactId>java-jwt</artifactId>

<version>3.10.3</version>

</dependency>

使用Apple第三方登录Java版相关推荐

  1. java加按钮_如何从零开始对接第三方登录(Java版):QQ登录和微博登录

    阅读本文约需要8分钟 大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了HashMap和TreeMap的知识,今天跟大家分享下对 ...

  2. 如何从零开始对接第三方登录(Java版):QQ登录和微博登录

    前言 个人网站最近增加了评论功能,为了方便用户不用注册就可以评论,对接了QQ和微博这2大常用软件的一键登录,总的来说其实都挺简单的,可能会有一点小坑,但不算多,完整记录下来方便后来人快速对接. 后台设 ...

  3. java中如何实现qq登录与微博登录,如何从零开始对接第三方登录(Java版):QQ登录和微博登录(2)...

    到了这一步基本上涉及第三方的就结束了,是不是很简单?后面无非就是如何插入.如何存放token.写入session等. 有几点注意事项: 相关文档官网已经写得非常细了,但是相当乱: 这个我就不详细讲了, ...

  4. 友盟第三方登录精简版QQ遇到的坑

    这几天在项目中集成了友盟第三方登录,完成以后微信和微博基本都没什么问题,只有QQ遇到的问题比较烦人.具体的集成步骤我不在此赘述,官方文档上有,而且已经有不少介绍的很详细的文章.个人遇到问题可能不同,此 ...

  5. 第三方登录(QQ-Java版)

    1.为什么需要QQ登录网站? 这没啥可说的,无非就是想利用QQ庞大的用户群体,提高本站流量,达到快速扩充本站用户的效果,当然,无论是QQ登录,还是其它第三方登录方式,这些都是辅助效果,真正的目的还是需 ...

  6. 新浪微博OAuth接口实现登录 java版

    新浪微博采用的是OAuth协议来做的登录,现在登录接口做完了.留个笔记方便以后查阅,也方便后来人能够少走一些弯路. 首先简单说说OAuth授权协议:OAUTH协议为用户资源的授权提供了一个安全的.开放 ...

  7. flutter集成Apple第三方登录

    1.在开发平台Certificates, Identifiers & Profiles中找到项目的Identifiers 勾选Sign in with Apple 2.在项目中将Sign in ...

  8. webDriver测试百度登录java版

    2019独角兽企业重金招聘Python工程师标准>>> package bwgang; import org.openqa.selenium.By; import org.openq ...

  9. 微信第三方登录——JAVA后台

    小编在此说一声,建议去看一下微信官方提供的流程图,以及其他的之后再看下面的.小编在此就不提供账号申请,那些准备工作了,直接上代码. 微信官方示例→点击打开链接 微信登录流程: 第一步:APP或者网页端 ...

  10. 人工智能,百度AI人脸识别java版

    人工智能,百度AI人脸识别java版 需求:人脸识别登录,人脸就需要有人脸的照片,数据库建一个字段face保存用户人脸的照片,jquery.webcam.js实现调用摄像头拍照,然后后端接受base6 ...

最新文章

  1. MacBook Air 使用技巧
  2. 连接池Connection Pool 单例设计
  3. JVM之垃圾收集机制四种GC算法详解
  4. Serial.println()和Serial.print() (Arduino编程)
  5. phpexcel.php linux,phpexcel在linux系统报错如何解决
  6. pe估值 python_Python编程学习笔记(7)
  7. 输出最长上升子序列 模型(DP)
  8. 什么是3D打印?游戏建模具体怎么做?哪个更有发展
  9. PCWorld:IT界14对经典“生死冤家”
  10. 运用flask框架发送短信验证码的流程及具体代码
  11. FusionStorage原理及组件
  12. 多个文本对比相似度分析
  13. kettle日志解析_kettle之日志有关方面的总结
  14. 乌鸦救赎《社交光环》
  15. component组件
  16. 网页快照(Snapshot)使用的相关研究(萌新向总结)
  17. 【调剂】计算机好的矿山安全、计算机等专业工科男(学硕)调剂信息
  18. 做淘客太难?一个淘客三年来的经历与心得
  19. php 上传ppt,PHP实现文件上传PPT精品文档
  20. 仿射投影算法 matlab,基于仿射投影算法的时延估计

热门文章

  1. app做好后如何上线_自己做的app从做好到上架需要什么手续或过程?
  2. SciPy教程 - 稀疏矩阵库scipy.sparse
  3. 一文详解SQL关联子查询
  4. linux安装pycuda报错 517
  5. 权力纷争必须上演公章大战?其实duck不必
  6. 腾讯 TAPD DevOps 开放生态最佳实践
  7. Semi-Supervised Semantic Image Segmentation with Self-correcting Networks:基于自校正网络的半监督语义图像分割
  8. 电离释放型动态水处理器
  9. 超纯水颗粒计数器在电子半导体中的应用
  10. 五、interfaces 和 daos