jwt android

    <dependency>
      <groupId>com.auth0</groupId>
      <artifactId>java-jwt</artifactId>
      <version>3.8.1</version>
    </dependency>
package com.oasis.test;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTCreationException;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.oasis.App;

import java.util.Date;

public class TestJwt extends App {


    public static void main(String[] args) {



        /**
         *
         * basic test
         *
         *   String create = createBasic();
             logger.info(createBasic());

             try {
             Thread.sleep(10000);
             } catch (InterruptedException e) {
             e.printStackTrace();
             }
             logger.info(decodeBasic(create));
         *
         */


    }

    /**
     *   iss: The issuer of the token,token 是给谁的
         sub: The subject of the token,token 主题
         exp: Expiration Time。 token 过期时间,Unix 时间戳格式
         iat: Issued At。 token 创建时间, Unix 时间戳格式
         jti: JWT ID。针对当前 token 的唯一标识
     * @return
     */
    public static String createfull(){
        //当前系统时间
        long nowMillis = System. currentTimeMillis();
        //token 在多少秒后过期  单位是毫秒
        long expires = nowMillis + 18000 ;

        try {
            Algorithm algorithm = Algorithm.HMAC256("secret");
            String token = JWT.create()
                    .withIssuer("auth0")
                    .withIssuedAt(new Date(nowMillis))
                    .withClaim("hello","hellovalue")
                    .withExpiresAt(new Date(expires))
                    .sign(algorithm);
            return token ;
        } catch (JWTCreationException exception){
            //Invalid Signing configuration / Couldn't convert Claims.
            exception.printStackTrace();
        }

        return null;
    }

    public static String createBasic(){

        long nowMillis = System. currentTimeMillis();
        long expires = nowMillis + 18000 ;

        try {
            Algorithm algorithm = Algorithm.HMAC256("secret");
            String token = JWT.create()
                    .withIssuer("auth0")
                    .withClaim("hello","hellovalue")
                    .withExpiresAt(new Date(expires))
                    .sign(algorithm);
            return token ;
        } catch (JWTCreationException exception){
            //Invalid Signing configuration / Couldn't convert Claims.
            exception.printStackTrace();
        }

        return null;
    }

    public static String decodeBasic(String token){
        try {
            Algorithm algorithm = Algorithm.HMAC256("secret");
            JWTVerifier verifier = JWT.require(algorithm)
                    .withIssuer("auth0")
                    .build(); //Reusable verifier instance
            DecodedJWT jwt = verifier.verify(token);
            return jwt.getClaim("hello").asString();
        } catch (JWTVerificationException exception){
            //Invalid signature/claims
            exception.printStackTrace();
        }
        return null;
    }


}

 

### 如何在Android应用中实现JWT认证 #### 1. 添加依赖项 为了处理JWT,在项目`build.gradle`文件中添加必要的库。通常情况下,可以使用OkHttp来发送HTTP请求以及Gson解析JSON响应。 ```gradle dependencies { implementation 'com.squareup.okhttp3:okhttp:4.9.0' implementation 'com.google.code.gson:gson:2.8.7' } ``` #### 2. 获取Token 当用户登录成功后,服务器返回一个包含JWT的响应体。客户端应该保存这个token以便后续API调用作为身份验证凭证携带过去[^4]。 #### 3. 存储Token安全地 考虑到安全性问题,建议不要简单地把token存放在SharedPreferences里;而是考虑采用更安全的方式比如EncryptedSharedPreferences或者KeyStore系统来保护敏感信息不被轻易访问到[^1]。 #### 4. 发送带有Token的请求 每次向受保护资源发起网络请求之前都需要附加Authorization头字段,格式如下所示: ```java String authHeader = "Bearer " + jwtToken; Request request = new Request.Builder() .url(apiEndpoint) .addHeader("Authorization", authHeader) .build(); ``` 这里假设`jwtToken`变量已经包含了有效的JWT字符串[^2]。 #### 5. 处理过期情况 如果接收到的状态码为401 Unauthorized,则表明当前使用的access token可能已失效。此可以根据具体业务逻辑决定是否尝试刷新token或是重新引导用户完成整个登陆流程获取新的token[^3]。 ```java if (response.code() == 401){ // Handle Token Expired or Invalid scenario here. } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值