使用Apple第三方登录Java版
由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版相关推荐
- java加按钮_如何从零开始对接第三方登录(Java版):QQ登录和微博登录
阅读本文约需要8分钟 大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了HashMap和TreeMap的知识,今天跟大家分享下对 ...
- 如何从零开始对接第三方登录(Java版):QQ登录和微博登录
前言 个人网站最近增加了评论功能,为了方便用户不用注册就可以评论,对接了QQ和微博这2大常用软件的一键登录,总的来说其实都挺简单的,可能会有一点小坑,但不算多,完整记录下来方便后来人快速对接. 后台设 ...
- java中如何实现qq登录与微博登录,如何从零开始对接第三方登录(Java版):QQ登录和微博登录(2)...
到了这一步基本上涉及第三方的就结束了,是不是很简单?后面无非就是如何插入.如何存放token.写入session等. 有几点注意事项: 相关文档官网已经写得非常细了,但是相当乱: 这个我就不详细讲了, ...
- 友盟第三方登录精简版QQ遇到的坑
这几天在项目中集成了友盟第三方登录,完成以后微信和微博基本都没什么问题,只有QQ遇到的问题比较烦人.具体的集成步骤我不在此赘述,官方文档上有,而且已经有不少介绍的很详细的文章.个人遇到问题可能不同,此 ...
- 第三方登录(QQ-Java版)
1.为什么需要QQ登录网站? 这没啥可说的,无非就是想利用QQ庞大的用户群体,提高本站流量,达到快速扩充本站用户的效果,当然,无论是QQ登录,还是其它第三方登录方式,这些都是辅助效果,真正的目的还是需 ...
- 新浪微博OAuth接口实现登录 java版
新浪微博采用的是OAuth协议来做的登录,现在登录接口做完了.留个笔记方便以后查阅,也方便后来人能够少走一些弯路. 首先简单说说OAuth授权协议:OAUTH协议为用户资源的授权提供了一个安全的.开放 ...
- flutter集成Apple第三方登录
1.在开发平台Certificates, Identifiers & Profiles中找到项目的Identifiers 勾选Sign in with Apple 2.在项目中将Sign in ...
- webDriver测试百度登录java版
2019独角兽企业重金招聘Python工程师标准>>> package bwgang; import org.openqa.selenium.By; import org.openq ...
- 微信第三方登录——JAVA后台
小编在此说一声,建议去看一下微信官方提供的流程图,以及其他的之后再看下面的.小编在此就不提供账号申请,那些准备工作了,直接上代码. 微信官方示例→点击打开链接 微信登录流程: 第一步:APP或者网页端 ...
- 人工智能,百度AI人脸识别java版
人工智能,百度AI人脸识别java版 需求:人脸识别登录,人脸就需要有人脸的照片,数据库建一个字段face保存用户人脸的照片,jquery.webcam.js实现调用摄像头拍照,然后后端接受base6 ...
最新文章
- MacBook Air 使用技巧
- 连接池Connection Pool 单例设计
- JVM之垃圾收集机制四种GC算法详解
- Serial.println()和Serial.print() (Arduino编程)
- phpexcel.php linux,phpexcel在linux系统报错如何解决
- pe估值 python_Python编程学习笔记(7)
- 输出最长上升子序列 模型(DP)
- 什么是3D打印?游戏建模具体怎么做?哪个更有发展
- PCWorld:IT界14对经典“生死冤家”
- 运用flask框架发送短信验证码的流程及具体代码
- FusionStorage原理及组件
- 多个文本对比相似度分析
- kettle日志解析_kettle之日志有关方面的总结
- 乌鸦救赎《社交光环》
- component组件
- 网页快照(Snapshot)使用的相关研究(萌新向总结)
- 【调剂】计算机好的矿山安全、计算机等专业工科男(学硕)调剂信息
- 做淘客太难?一个淘客三年来的经历与心得
- php 上传ppt,PHP实现文件上传PPT精品文档
- 仿射投影算法 matlab,基于仿射投影算法的时延估计