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

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

https://github.com/jwtk/jjwt

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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值