参考

Java与.Net实现实现

// java HMacsha256
private static final String MAC_INSTANCE_NAME = "HMacSHA256"; public static String Hmacsha256(String secret, String message) throws NoSuchAlgorithmException, InvalidKeyException {
Mac hmac_sha256 = Mac.getInstance(MAC_INSTANCE_NAME);
SecretKeySpec key = new SecretKeySpec(secret.getBytes(), MAC_INSTANCE_NAME);
hmac_sha256.init(key);
byte[] buff = hmac_sha256.doFinal(message.getBytes());
return Base64.encodeBase64URLSafeString(buff);
} // java jwt
@Test
public void testJWT() throws InvalidKeyException, NoSuchAlgorithmException {
String secret = "eerp";
String header = "{\"type\":\"JWT\",\"alg\":\"HS256\"}";
String claim = "{\"iss\":\"cnooc\", \"sub\":\"yrm\", \"username\":\"yrm\", \"admin\":true}"; String base64Header = Base64.encodeBase64URLSafeString(header.getBytes());
String base64Claim = Base64.encodeBase64URLSafeString(claim.getBytes());
String signature = ShaUtil.Hmacsha256(secret, base64Header + "." + base64Claim); String jwt = base64Header + "." + base64Claim + "." + signature;
System.out.println(jwt);
} // c# Hmacsha256
protected String HMacSha256Hash(String key, String message)
{
var keyBytes = Encoding.UTF8.GetBytes(key);
using (var hmacsha256 = new HMACSHA256(keyBytes))
{
var buffer = hmacsha256.ComputeHash(Encoding.UTF8.GetBytes(message));
var b64 = Base64UrlSafeString(buffer);
return b64;
}
} protected String Base64UrlSafeString(Byte[] bytes)
{
var b64 = Convert.ToBase64String(bytes);
return b64.Replace("=", "").Replace("+", "-").Replace("/", "_");
} // c# jwt
[Test]
public void testJWT()
{
String secret = "eerp";
String header = "{\"type\":\"JWT\",\"alg\":\"HS256\"}";
String claim = "{\"iss\":\"cnooc\", \"sub\":\"yrm\", \"username\":\"yrm\", \"admin\":true}"; var encoding = Encoding.UTF8;
var base64Header = Base64UrlSafeString(encoding.GetBytes(header));
var base64Claim = Base64UrlSafeString(encoding.GetBytes(claim));
var signature = HMacSha256Hash(secret, base64Header + "." + base64Claim); var jwt = base64Header + "." + base64Claim + "." + signature;
Console.WriteLine(jwt); }

结果:

eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFMyNTYifQ.eyJpc3MiOiJjbm9vYyIsICJzdWIiOiJ5cm0iLCAidXNlcm5hbWUiOiJ5cm0iLCAiYWRtaW4iOnRydWV9.sAHcCnpnsPA0T9i-Ig9oZnVq3N0-kK_aCwlkzFOkrH8

JWT(JSON Web Token) Java与.Net简单编码实现的更多相关文章

  1. Java JWT: JSON Web Token

    Java JWT: JSON Web Token for Java and Android JJWT aims to be the easiest to use and understand libr ...

  2. ( 转 ) 什么是 JWT -- JSON WEB TOKEN

    什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点 ...

  3. 如何在SpringBoot中集成JWT(JSON Web Token)鉴权

    这篇博客主要是简单介绍了一下什么是JWT,以及如何在Spring Boot项目中使用JWT(JSON Web Token). 1.关于JWT 1.1 什么是JWT 老生常谈的开头,我们要用这样一种工具 ...

  4. JWT(JSON Web Token) 【转载】

    JWT(JSON Web Token) 什么叫JWTJSON Web Token(JWT)是目前最流行的跨域身份验证解决方案. 一般来说,互联网用户认证是这样子的. 1.用户向服务器发送用户名和密码. ...

  5. 什么是JWT(Json Web Token)

    什么是 JWT (Json Web Token) 用户认证是计算机安全领域一个永恒的热点话题. JWT 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519). 该to ...

  6. 温故知新,.Net Core遇见JWT(JSON Web Token)授权机制方案

    什么是JWT JWT (JSON Web Token) 是一个开放标准,它定义了一种以紧凑和自包含的方法,用于在双方之间安全地传输编码为JSON对象的信息. 因此,简单来说,它是JSON格式的加密字符 ...

  7. [更新]一份包含: 采用RSA JWT(Json Web Token, RSA加密)的OAUTH2.0,HTTP BASIC,本地数据库验证,Windows域验证,单点登录的Spring Security配置文件

    没有任何注释,表怪我(¬_¬) 更新: 2016.05.29: 将AuthorizationServer和ResourceServer分开配置 2016.05.29: Token获取采用Http Ba ...

  8. 关于JWT(Json Web Token)的思考及使用心得

    什么是JWT? JWT(Json Web Token)是一个开放的数据交换验证标准rfc7519(php 后端实现JWT认证方法一般用来做轻量级的API鉴权.由于许多API接口设计是遵循无状态的(比如 ...

  9. API安全验证之JWT(JSON WEB TOKEN) OLCMS

    假如www.olcms.com/getUserInfo获取用户信息,你怎么知道当前用户是谁?有人说登陆时候我把他UID写入session了,如果是API接口,没有session怎么办,那么就需要把UI ...

随机推荐

  1. python xpath 中的全部用法

    不好意思 ,太仓促只能给你们个url 链接:https://blog.csdn.net/hhtnan/article/details/77509549

  2. 中线,基线,垂直居中vertical-align:middle的一些理解

    基线:小写字母xxxxx的下边缘线就是我们的css基线:一般的行内元素都是vertical-align: baseline;默认设置: x-height:就是指小写字母xxxx的高度,下边缘线到上边缘 ...

  3. iOS 自动订阅开发

    一.代码逻辑 关于iOS 订阅.自动订阅 本身功能开发很简单.跟正常的购买没什么大的差异.唯一需要特殊处理(自动订阅)的是, 在APP启动时候要增加侦听: [[SKPaymentQueue defau ...

  4. java并发再次积累

    监视器与锁之间的关系: 1.object monitor 是任何一个对象都有的内置的数据结构,它是用来协调使用当前对象的多个线程之间的执行顺序的(wait/notify),线程会block或者wait ...

  5. 关于Task的认识

    首先来说说 Task.Factory.StartNew这种方式来创建Task,这里的WaitAll()指的是等待所有Task执行完成,并且里面的Task参数(t1,t2)是异步的,先以匿名委托方式 s ...

  6. 20145322何志威 《Java程序设计》第8周学习总结

    教材学习内容总结 第十四章 NIO使用频道(channel)来衔接数据节点,对数据区的标记提供了clear(),rewind(),flip(),compact()等高级操作. 想要取得channel的 ...

  7. linux第四周

    一.知识点总结 (一)用户态.内核态和中断 1.内核态:在高的执行级别下,代码可以执行特权指令,访问任意的物理地址,这时的CPU就对应内核态 2.用户态:在低级别的指令状态下,代码 只能在级别允许的特 ...

  8. IO多路复用客户端-服务器模型

    IO多路复用服务器 -- 实现字符回射 服务器端 /************************************************************************* ...

  9. 快用Visual Studio(二)- 界面,功能区与命令面板

    Layout Editing Explorer Saving Searching Command Palette File Navigation File and Folder Based Files ...

  10. Nodejs V8引擎 fast property lookup

    前言 之所以会研究这个东西,是我在网上找了一下各个语言的执行效率比较.好吧,我承认这是个无聊的东西,不过看看总是无妨,然而我惊讶的发现,有些测试声称Java,C,Nodejs是处在同一个效率级别参见链 ...