android 中使用jwt token(json web token)--java

来源:互联网 发布:淘宝永久模板在哪里买 编辑:程序博客网 时间:2024/05/29 16:22

android 和 java 中使用jwt 

首先说下为什么要写这篇博客,由于项目的需求,我发现在国类一般都不怎么去用,在baidu上搜了一大堆发现都没有相关的例子,就给大家贡献出来,希望以后有人需要用的时候在国内能看到,提供给需要用的人去用,如果需要转载,请表明转载处,谢谢。

其次说下  为什么要使用jwt,让网络数据更加安全,以防其他一些人无意恶搞

在这里简单说下:jwt是一个开源的java库,一个自包含的Java库,提供终端到终端的JSON网络令牌的创建和验证。

JWT的目标是成为最简单的库,用于创建和JVM上的验证JSON网络令牌(JWTs),

Java的JSON网络令牌 - 设计简单

JSON网络令牌用于Java和Android库是非常简单的使用由于其基于建设者,流畅的界面,它隐藏大多数内部的复杂性。这是伟大的依赖IDE自动完成快速编写代码。

for example

javaimport 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提供。它甚至还提供了方便的密钥生成机制,所以你不必担心产生安全/安全密钥:

javaMacProvider.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上的连接

https://github.com/jwtk/jjwt

http://dev.duoshuo.com/docs/501e6ce1cff715f71800000d

0 1