android 和 java 中使用jwt
首先说下为什么要写这篇博客,由于项目的需求,我发现在国类一般都不怎么去用,在baidu上搜了一大堆发现都没有相关的例子,就给大家贡献出来,希望以后有人需要用的时候在国内能看到,提供给需要用的人去用,如果需要转载,请表明转载处,谢谢。
其次说下 为什么要使用jwt,让网络数据更加安全,以防其他一些人无意恶搞
在这里简单说下:jwt是一个开源的java库,一个自包含的Java库,提供终端到终端的JSON网络令牌的创建和验证。
JWT的目标是成为最简单的库,用于创建和JVM上的验证JSON网络令牌(JWTs),
Java的JSON网络令牌 - 设计简单
该JSON网络令牌用于Java和Android库是非常简单的使用由于其基于建设者,流畅的界面,它隐藏大多数内部的复杂性。这是伟大的依赖IDE自动完成快速编写代码。
for example
java
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.impl.crypto.MacProvider;
import java.security.Key;
// We need a signing key, so we'll create one just for this example. Usually
// the key would be read from your application configuration instead.
Key key = MacProvider.generateKey();
String jwtString = Jwts.builder().setSubject("Joe").signWith(SignatureAlgorithm.HS512, key).compact();
当谈到创建,解析和验证数字签名的紧凑JWTs(又名JWSs),所有的标准JWS算法支持开箱即用:
- HS256:HMAC使用SHA-256
- HS384:HMAC使用SHA-384
- HS512:HMAC使用SHA-512
- RS256:使用RSASSA-PKCS-v1_5中SHA-256
- RS384:使用RSASSA-PKCS-v1_5中SHA-384
- RS512:使用RSASSA-PKCS-v1_5中SHA-512
- PS256:RSASSA-PSS使用SHA-256和MGF1与SHA-256
- PS384:RSASSA-PSS使用SHA-384和MGF1与SHA-384
- PS512:RSASSA-PSS使用SHA-512和MGF1与SHA-512
- ES256:在使用P-256和SHA-256 ECDSA
- ES384:在使用P-384和SHA-384 ECDSA
- ES512:在使用P-512和SHA-512 ECDSA
在这里简单说下:一般使用256的,512是属于高级加密,可能国安局的用的比较多。
无需安装额外的加密库; 所有这些算法由JJWT提供。它甚至还提供了方便的密钥生成机制,所以你不必担心产生安全/安全密钥:
java
MacProvider.generateKey(); //or generateKey(SignatureAlgorithm)
RsaProvider.generateKeyPair(); //or generateKeyPair(sizeInBits)
EllipticCurveProvider.generateKeyPair(); //or generateKeyPair(SignatureAlgorithm)
下面贴上自己项目中的一个小小的example
import com.nimbusds.jose.JOSEException;
import com.nimbusds.jose.JWSAlgorithm;
import com.nimbusds.jose.JWSHeader;
import com.nimbusds.jose.JWSObject;
import com.nimbusds.jose.JWSSigner;
import com.nimbusds.jose.Payload;
import com.nimbusds.jose.crypto.MACSigner;
import net.minidev.json.JSONObject;
/**
* Created by Fly0116 on 2016/4/9 0009.
* json web token example
*/
public class Example {
static String DUOSHUO_SHORTNAME = "test";
static String DUOSHUO_SECRET = "3d990d2276917dfac04467df11fff26d";
public static void main(String [] args){
JSONObject userInfo = new JSONObject();
userInfo.put("short_name", DUOSHUO_SHORTNAME);//必须项
userInfo.put("user_key", "1");//必须项
userInfo.put("name", "网站用户A");//可选项
Payload payload = new Payload(userInfo);
JWSHeader header = new JWSHeader(JWSAlgorithm.HS256);
header.setContentType("jwt");
// Create JWS object
JWSObject jwsObject = new JWSObject(header, payload);
// Create HMAC signer
JWSSigner signer = new MACSigner(DUOSHUO_SECRET.getBytes());
try {
jwsObject.sign(signer);
} catch (JOSEException e) {
System.err.println("Couldn't sign JWS object: " + e.getMessage());
return;
}
// Serialise JWS object to compact format
String token = jwsObject.serialize();
System.out.println("Serialised JWS object: " + token);
//示例输出结果为eyJhbGciOiJIUzI1NiIsImN0eSI6Imp3dCJ9.eyJ1c2VyX2tleSI6IjEiLCJuYW1lIjoi572R56uZ55So5oi3QSIsInNob3J0X25hbWUiOiJ0ZXN0In0.NXKDXwXThzFkyfl_k_-p6mfM5cpOFppvfdIjrjEq14I
}
}
此实例仅供参考
在这里附上git上的连接