Java Apple_GitHub - izhaorui/AppleLogin-java: 苹果登录 Sign in with Apple 服务端校验

APP端苹果登录java后端校验

主要校验苹果授权登录token 是否正确

主要方法

public RSAPublicKeySpec build(final String n, final String e) {

final BigInteger modulus = new BigInteger(1, Base64.decodeBase64(n));

final BigInteger publicExponent = new BigInteger(1, Base64.decodeBase64(e));

return new RSAPublicKeySpec(modulus, publicExponent);

}

public int verify(final PublicKey key, final String jwt, final String audience, final String subject) {

final JwtParser jwtParser = Jwts.parser().setSigningKey(key);

jwtParser.requireIssuer("https://appleid.apple.com");

jwtParser.requireAudience(audience);

jwtParser.requireSubject(subject);

try {

final Jws claim = jwtParser.parseClaimsJws(jwt);

if (claim != null && claim.getBody().containsKey("auth_time")) {

claims = claim;

log.info("[Apple登录解密结果]header:{},body:{},signature:{}", claim.getHeader(), claim.getBody(),

claim.getSignature());

return 1;

}

return 0;

} catch (final ExpiredJwtException e) {

log.error("apple identityToken expired");

return -1;

} catch (final Exception e) {

log.error("apple identityToken illegal");

return -2;

}

}

/**

* 从hex string生成公钥

*

* @param stringN

* @param stringE

* @return 构造好的公钥

* @throws NoSuchAlgorithmException

* @throws InvalidKeySpecException

*/

public static PublicKey createPublicKey(final String stringN, final String stringE)

throws NoSuchAlgorithmException, InvalidKeySpecException {

try {

// BigInteger N = new BigInteger(stringN, 16); // hex base

// BigInteger E = new BigInteger(stringE, 16); // hex base

final BigInteger modulus = new BigInteger(1, Base64.decodeBase64(stringN));

final BigInteger publicExponent = new BigInteger(1, Base64.decodeBase64(stringE));

final RSAPublicKeySpec spec = new RSAPublicKeySpec(modulus, publicExponent);

final KeyFactory kf = KeyFactory.getInstance("RSA");

return kf.generatePublic(spec);

} catch (final Exception e) {

e.printStackTrace();

}

return null;

}

需要引用到的pom包

io.jsonwebtoken

jjwt

0.9.1

com.alibaba

fastjson

1.2.30

org.apache.httpcomponents

httpclient

com.javabase64

javabase64

1.3.1

commons-lang

commons-lang

2.6

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软中文网,越办越好了!

哎呀!这几天研究多了些微软中文网站,发现越来越多有用的东西了,中文网站真是越来越好了,不光是微软的技术,很多企业级的开发相关的很多有用的资料,而且无论是翻译还是我们可爱的MVP们文字表述的都非常的到位…

iOS应用日志:开始编写日志组件与异常日志

经营你的iOS应用日志(一):开始编写日志组件 对于那些做后端开发的工程师来说,看LOG解Bug应该是理所当然的事,但我接触到的移动应用开发的工程师里面,很多人并没有这个意识,查Bug时总是一遍一遍的…

java程序cpu突然飚高_Java 定位导致CPU飙升的代码过程

线上的一个日志实时输出的程序曾经出过这样一个问题,刚开始上线java程序占用的CPU的资源很少,但是到了整点的时候,CPU直线飙高,直接到达100%根本没有要下降的趋势,唯一的方法只能杀掉它了,后面在借助jstack与top排查到线程然后定位…

如何在 Web 发布规则中使用证书进行 SSL 身份验证

概要 本文介绍如何设置 Internet Security and Acceleration (ISA) Server 2000 来发布需要客户端使用证书进行身份验证的 Web 站点。对于使用基于证书的身份验证作为建立安全套接字层连接的唯一方法的 Web 站点,这是必需的。在 ISA Server 的 Web 发布规则中指定证…

java代码情书_程序员们的爱情表白书

下面看看我们程序员是如何用自己的语言说出爱你。就算闷呆,也要闷呆得很性感。java程序员的情书我能抽象出整个世界...但是我不能抽象出你...因为你在我心中是那么的具体.&#xff0…

motorola 企业移动解决方案

(一)moto数据采集解决方案 数据采集和查询,可随时随地记录并传输各种形式的数据 安全便捷接入企业数据库,实现数据前后台无缝整合 终端小巧,方便携带;快速、低成本的实现高效移动远程管理 (二&a…

使用乱序标签来控制HTML的输出效果

在HTML的元素中,有一个比较特殊的元素form。我们用它来收集表单数据并提交给服务器,并且理论上说来它是没有任何的UI被呈现的。当然如果我们在body元素后紧跟一个form,这样一来似乎看不出来有什么UI呈现的问题,可是当form存在于别…

百度地图离线sdk java_百度地图SDK java.lang.UnsatisfiedLinkError: Couldn't load BaiduMapSDK...

错误信息java.lang.UnsatisfiedLinkError: Couldn‘t load BaiduMapSDK_v3_2_0_15 from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.baidudemo-1.apk"],nativeLibraryDirectories[/data/app-lib/com.example.baidudemo-1, …

杭电2019多校第一场,Problem I,String 2019

题目描述 Tom has a string containing only lowercase letters. He wants to choose a subsequence of the string whose length is k and lexicographical order is the smallest. Its simple and he solved it with ease.But Jerry, who likes to play with Tom, tells him …

2024年最新Python爬虫入门『最强教程』新鲜出炉!

近年来,大数据成为业界与学术界最火热的话题之一,数据已经成为每个公司极为重要的资产。互联网大量的公开数据为个人和公司提供了以往想象不到的可以获取的数据量。而掌握网络爬虫技术可以帮助你获取这些有用的公开数据集。 爬虫能干什么呢?一…

如何使编译的EXE程序能多个运行?

如何使编译的EXE程序能多个运行?方法很简单,把这句话加到EXE对应的INI文件中去allowmultipleinstancesTrue不错吧!:)转载于:https://www.cnblogs.com/Qia_sky/archive/2005/05/18/158119.html

java实现多对多关系的方法_Hibernate一对多关联双向关联代码实现分享

1、创建实体类(Customer.java、Orders.java)package wck.stu.vo.oneToMany_single;import java.util.HashSet;import java.util.Set;public class Customer {private String id "";private String cName "";private String bank "";private S…

使用LUA构建页面

Android,LUA,CoronaCard 使用CoronaCard引擎构建页面,只需要嵌入CoronaView,就可以构建灵活多样的页面。 微游手柄游戏厅 4.0版本,全面改版,使用LUA语言,通过CoronaCard引擎构建。 一 界面效果&…

C#实现Singleton (转载)

您要在 C# 中构建应用程序。您需要只有一个实例的类,并且需要提供一个用于访问实例的全局访问点。您希望确保您的解决方案高效,并且能够利用 Microsoft? .NET 公共语言运行库功能。您可能还希望确保解决方案是线程安全的。 实现策略 尽管 Singleton 是一…

java当中显示紫色_在java中将深色变为亮色

我正在开发一个程序,我从图像的一部分中获取RGB值.我想去除颜色中的黑暗并使其变亮.我所做的是使用Color.RGBtoHSB然后获取亮度通道并将其设置为范围内的最高值,然后将HSB转换回RGB.但是,当我这样做时,颜色会完全改变.这是一个深红色的例子,它变成紫色,我用这个代码.System.out…

iTunes Connect上传APP屏幕快照图片失败 - 您必须上传有效的屏幕快照。

您必须上传有效的屏幕快照。 原因很简单:这个屏幕快照 要用 iPhone截屏才可以,你自已随便在电脑上截个图肯定不行 //------------------------------------------------------------------------------------------------------------------------------…

JQuery VS JS DOM

JQ断断续续的也用了一阵子了.对我来说确实是个小小的突破。之前的javascript 简直是 一塌糊涂。。糊涂到 连:document.getElementById("") 这个语句都不会写。哈哈这也算是选择JQ的一个理由吧,因为JQ 只需要$("#ID") $(".Class") 就可…

java设计模式组合模式详解_《JAVA设计模式》之组合模式(Composite)

在阎宏博士的《JAVA与模式》一书中开头是这样描述合成(Composite)模式的:html合成模式属于对象的结构模式,有时又叫作“部分——总体”模式。合成模式将对象组织到树结构中,能够用来描述总体与部分的关系。合成模式可使客户端将单纯元素与复合…

匹配嵌套的构造(较复杂)

如果还不明白正则表达式中(?:)的使用,请看:http://www.knowsky.com/297.html正则表达式的终极能力 - 递归 今天在QQ问liuzhi如何写一个匹配递归式的正则表达式时,没想到那家伙居然就回答“递归消除”,让我去看编译原理的书。&am…