导航:首页 > 文档加密 > jwe加密案例

jwe加密案例

发布时间:2023-01-19 21:55:03

A. 基于OAuth2的OIDC (OpenId Connect) 身份认证

OIDC(OpenID Connect)是在OAuth2上构建了一个身份层,是一个基于OAuth2协议的身份认证标准协议。

OAuth2是一个授权协议,它无法提供完善的身份认证功能【1】,OIDC使用OAuth2的授权服务器来为第三方客户端提供用户的身份认证,并把对应的身份认证信息传递给客户端。

如果用OAuth2进行认证,会有许多问题。

OAuth2提供了 Access Token 来解决授权第三方 客户端 访问受保护资源的问题;OIDC在这个基础上提供了 ID Token 来解决第三方客户端标识用户身份认证的问题。OIDC的核心在于在OAuth2的授权流程中,一并提供用户的身份认证信息( ID Token )给到第三方 客户端 , ID Token 使用 JWT 格式来包装。此外还提供了 UserInfo的 接口,用户获取用户的更完整的信息。

主要的术语以及概念介绍:

OIDC的流程由以下5个步骤构成:

OIDC对OAuth2最主要的扩展就是提供了 ID Token 。 ID Token 是一个安全 令牌 ,是一个 授权服务器 提供的包含用户信息(由一组Cliams构成以及其他辅助的Cliams)的 JWT 格式的数据结构。
另外 ID Token 必须使用JWS进行签名和JWE加密,从而提供认证的完整性、不可否认性以及可选的保密性。一个 ID Token 的例子如下:

因为OIDC基于OAuth2,所以OIDC的认证流程主要是由OAuth2的几种授权流程延伸而来的,有以下3种:

Resource Owner Password Credentials Grant是需要用途提供账号密码给RP的,账号密码给到RP了,就不再需要ID Token了。

Client Credentials Grant这种方式根本就不需要用户参与,更谈不上用户身份认证了。这也能反映授权和认证的差异,以及只使用OAuth2来做身份认证的事情是远远不够的,也是不合适的。

这里主要介绍基于Authorization Code的认证请求/答复。

所有的 Token 都是通过 Token EndPoint 来发放的。构建一个OIDC的Authentication Request需要提供如下的参数:

以上这5个参数是和OAuth2相同的。除此之外,还定义了一些参数【2】例如:

一个简单的示例如下:

在 授权服务器 接收到认证请求之后,需要对请求参数做严格的验证。验证通过后引导 EU 进行身份认证并且同意授权。在这一切都完成后,会重定向到 RP 指定的回调地址,并且把 code 和 state 参数传递过去。比如:

RP 使用上一步获得的 code 来请求 Token EndPoint ,这一步同OAuth2。然后 Token EndPoint 会返回响应的 Token ,其中除了OAuth2规定的部分数据外,还会附加一个 id_token 的字段。 id_token 字段就是上面提到的 ID Token 。例如:

其中看起来一堆乱码的部分就是 JWT 格式的 ID Token 。在 RP 拿到这些信息之后,需要对 id_token 以及 access_token 进行验证。至此,可以说用户身份认证就可以完成了,后续可以根据 UserInfo EndPoint 获取更完整的信息。

除了Core核心规范内容多一点之外,另外7个都是很简单且简短的规范,另外Core是基于OAuth2的,也就是说其中很多东西在复用OAuth2。

OpenId Connect定义了一个发现协议,它允许Client轻松的获取有关如何和特定的身份认证提供者进行交互的信息。在另一方面,还定义了一个Client注册协议,允许Client引入新的身份提供程序(identity providers)。通过这两种机制和一个通用的身份API,OpenId Connect可以运行在互联网规模上运行良好,在那里没有任何一方事先知道对方的存在。

UserIndo EndPoint 是一个受OAuth2保护的资源。在 RP 得到 Access Token 后可以请求此资源,然后获得一组 EU 相关的 Claims ,这些信息可以说是 ID Token 的扩展,

成功之后相应如下:

【1】 OAuth2中的access_token
【2】 [认证 & 授权] 4. OIDC(OpenId Connect)身份认证(核心部分)

B. wordpress主题被加密了,麻烦帮忙解一下,谢谢

解密后如下

?><?php get_sidebar(); ?>

</div><!-- end columns_wrapper -->

<div id="footer">

<div class="footer-left">
<p>Design <a href="http://www.slyar.com/">Slyar Home</a><br />
Support <a href="http://www.slyar.com/">Slyar Home</a> | <a href="http://www.slyar.com/">Slyar Blog</a> | <a href="http://www.slyar.com/">Slyar Home</a></p>
</div>

<div class="footer-right">
<p>?<?php echo date('Y');?> <a href="<?php bloginfo('siteurl');?>/" title="<?php bloginfo('name');?>" ><?php bloginfo('name');?></a></p>
</div>

</div> <!-- end footer -->

</div> <!-- end page -->

<?php wp_footer(); ?>

</div>

<script type="text/javascript">
var menu=new menu.dd("menu");
menu.init("menu","menuhover");
</script>

</body>
</html>

C. 一篇文章带你分清楚JWT,JWS与JWE

随着移动互联网的兴起,传统基于session/cookie的web网站认证方式转变为了基于OAuth2等开放授权协议的单点登录模式(SSO),相应的基于服务器session+浏览器cookie的Auth手段也发生了转变,Json Web Token出现成为了当前的热门的Token Auth机制。

JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在两个组织之间传递安全可靠的信息。

现在网上大多数介绍JWT的文章实际介绍的都是JWS(JSON Web Signature),也往往导致了人们对于JWT的误解,但是JWT并不等于JWS,JWS只是JWT的一种实现,除了JWS外,JWE(JSON Web Encryption)也是JWT的一种实现。
下面就来详细介绍一下JWT与JWE的两种实现方式:

JSON Web Signature是一个有着简单的统一表达形式的字符串:

头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。
JSON内容要经Base64 编码生成字符串成为Header。

payload的五个字段都是由JWT的标准所定义的。

后面的信息可以按需补充。
JSON内容要经Base64 编码生成字符串成为PayLoad。

这个部分header与payload通过header中声明的加密方式,使用密钥secret进行加密,生成签名。
JWS的主要目的是保证了数据在传输过程中不被修改,验证数据的完整性。但由于仅采用Base64对消息内容编码,因此不保证数据的不可泄露性。所以不适合用于传输敏感数据。

相对于JWS,JWE则同时保证了安全性与数据完整性。
JWE由五部分组成:

具体生成步骤为:

可见,JWE的计算过程相对繁琐,不够轻量级,因此适合与数据传输而非token认证,但该协议也足够安全可靠,用简短字符串描述了传输内容,兼顾数据的安全性与完整性。

D. springboot 集成jwt

原文地址: https://mp.weixin.qq.com/s/Jo3PZoa7nL99c8UCxPiTTA
以前一直使用的是jjwt这个JWT库,虽然小巧够用, 但对JWT的一些细节封装的不是很好。最近发现了一个更好用的JWT库nimbus-jose-jwt,简单易用,API非常易于理解,对称加密和非对称加密算法都支持,推荐给大家!
简介
nimbus-jose-jwt是最受欢迎的JWT开源库,基于Apache 2.0开源协议,支持所有标准的签名(JWS)和加密(JWE)算法。

JWT概念关系
这里我们需要了解下JWT、JWS、JWE三者之间的关系,其实JWT(JSON Web Token)指的是一种规范,这种规范允许我们使用JWT在两个组织之间传递安全可靠的信息。而JWS(JSON Web Signature)和JWE(JSON Web Encryption)是JWT规范的两种不同实现,我们平时最常使用的实现就是JWS。

使用
接下来我们将介绍下nimbus-jose-jwt库的使用,主要使用对称加密(HMAC)和非对称加密(RSA)两种算法来生成和解析JWT令牌。

对称加密(HMAC)
对称加密指的是使用相同的秘钥来进行加密和解密,如果你的秘钥不想暴露给解密方,考虑使用非对称加密。

要使用nimbus-jose-jwt库,首先在pom.xml添加相关依赖;

创建JwtTokenServiceImpl作为JWT处理的业务类,添加根据HMAC算法生成和解析JWT令牌的方法,可以发现nimbus-jose-jwt库操作JWT的API非常易于理解;

创建PayloadDto实体类,用于封装JWT中存储的信息;

在JwtTokenServiceImpl类中添加获取默认的PayloadDto的方法,JWT过期时间设置为60s;

创建JwtTokenController类,添加根据HMAC算法生成和解析JWT令牌的接口,由于HMAC算法需要长度至少为32个字节的秘钥,所以我们使用MD5加密下;
/**

keytool -genkey -alias jwt -keyalg RSA -keystore jwt.jks

<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-rsa</artifactId>
<version>1.0.7.RELEASE</version>
</dependency>

/**

/**

/**

/**

阅读全文

与jwe加密案例相关的资料

热点内容
哪个直播app有美颜 浏览:278
云阳哪里有学编程的 浏览:64
传奇单机gm命令不存在 浏览:753
得力文件夹侧面标签尺寸 浏览:674
格式工厂转换pdf格式 浏览:526
什么app可以教你化妆 浏览:545
程序员加班996怎么过 浏览:827
有个什么tv美女直播app 浏览:860
编译gcc比较全的参数 浏览:204
stvd取消编译器优化 浏览:423
pdf存储格式 浏览:588
加密软件提取时没有这个键怎么办 浏览:913
可以用命令行做什么好玩的东西 浏览:134
荣耀30s带方丹编译器吗 浏览:55
黑甲虫加密软件加密后文件不见了 浏览:277
惠州程序员名单 浏览:180
java可移植性 浏览:743
加密卡写卡工具 浏览:396
德善缘app是干什么的 浏览:821
中山云存储服务器 浏览:689