什么是token?Android中token的使用讲解

本文详细介绍了Token在计算机身份认证和数据处理中的作用,特别是在Android开发中的应用场景。讲解了基于Token的身份验证流程,包括登录后服务端签发Token,客户端存储并携带Token进行请求,以及服务端验证Token的过程。还提到了Token的存储策略,如文件存储、数据库存储和使用Redis。此外,文中给出了在Android中实现Token获取、加密解密、参数构造、保存Token到本地等实际开发步骤。
摘要由CSDN通过智能技术生成

 

通过本篇可以基本掌握使用token,下面就来一步一步开始学会使用吧!

Token(计算机术语)

在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。

数据处理

token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。例如在USB1.1协议中定义了4类数据包:token包、data包、handshake包和special包。主机和USB设备之间连续数据的交换可以分为三个阶段,第一个阶段由主机发送token包,不同的token包内容不一样(暗号不一样)可以告诉设备做不同的工作,第二个阶段发送data包,第三个阶段由设备返回一个handshake包。

 

(网络上)基于 Token 的身份验证方法

 使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:

  1. 客户端使用用户名跟密码请求登录
  2. 服务端收到请求,去验证用户名与密码
  3. 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
  4. 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
  5. 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
  6. 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据

下面是个人的理解:

1.登录的时候(或者第一次打开APP的时候),登录成功之后,我们需要给他分配一个token。(1)token可以是文件的形式存着;(2)也可以存在数据库,但是存放在数据库,我个人不推荐,因为每次调用api接口都会对比,这样做法会加重服务器压力;(3)用redis存放token。

2.登录之后,我们要返回token,让安卓或者ios去保存这个token,以后每次操作都携带token去请求接口。

3.接下来就是我们要用它传给我们的token去对比,如果符合,那就正常返回数据,否则就返回一个标识,告诉app说这个token不符合,需要重新登录。

 

下面我们来看一下token的具体使用,在开发中我的需求是用户第一次打开我们的APP的时候就获取到一个token,然后保存到本地,这样在下一次打开后我们就能根据token来判断用户的信息(如果用户注册,则把用户信息和token在后台绑定):

1:首先获取token(这里是当打开APP的时候的一个Activity中)

//初始化数据,获得应用的token并且保存
public void initData() {
    //判断有没有旧的token,AndroidFileUtil这个工具类在下面的代码中
    String myToken = AndroidFileUtil.readFileByLines(getCacheDir().getAbsolutePath() + "/" + DataConfig.TOKEN_FILE_NAME);
    if (!TextUtils.isEmpty(myToken)) {
        Log.d("WelcomeActivity","Token: "+myToken);
    } else {
        APIConfig.getDataIntoView(new Runnable() {
            @Override
            public void run() {
                String member = "member";
                Map<String, String> map = new HashMap<>();
                map.put("grantType", member);
                map.put("token","");
                map.put("appId","");
                map.put("appSecret","");
                //对传入的数据进行加密
                String paramJson = EncryptUtil.encrypt(map);
                //下面的是获取token的服务器地址,项目中应该根据具体的请求地址
                String url = "xxxhttp://45.5.175.255/shop/api/xxxtoken/refresh.do";
                String rs = HttpUtil.GetDataFromNetByPost(url,
                        new ParamsBuilder().addParam("paramJson", paramJson).getParams());
                //对数据进行解密到我们的一个保存token的类中(UserToken类)
                final UserToken result = EncryptUtil.decrypt(rs, UserToken.class);
                if (result != null && result.getResult() == APIConfig.CODE_SUCCESS) {
                    //保存我们获取的token在文件中,方便下次获取,这个工具也在下面
                    APIUtil.saveToken(result.getData());
                } else {
                  //下面的是自己写的一个工具类,也可以用Toast弹窗消息
                    ToastUtil.toastByCode(result);
                }
            }
        });
    }
}
  • 6
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
JWT(JSON Web Token)是一种用于身份验证和授权的开放标准(RFC 7519)。它是一种轻量级的安全传输方式,用于在网络应用间传递声明信息。JWT由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。 头部包含了关于令牌的元数据和加密算法的信息,通常由两部分组成:令牌类型(即JWT)和所使用的签名算法(如HMAC SHA256或RSA)。 载荷是JWT的主要内容,包含了一些声明信息,如用户ID、角色、权限等。载荷可以自定义,但建议只包含一些非敏感的信息,因为JWT是可解码的。 签名是对头部和载荷进行加密生成的,用于验证JWT的真实性和完整性。签名需要使用头部指定的算法和密钥进行生成,接收方可以通过验证签名来确保JWT没有被篡改。 生成JWT token的过程如下: 1. 创建一个包含所需声明信息的JSON对象。 2. 使用Base64编码头部和载荷,形成两个字符串。 3. 将两个字符串用点号连接起来,形成一个未签名的JWT。 4. 使用指定的算法和密钥对未签名的JWT进行签名,生成签名字符串。 5. 将签名字符串添加到未签名的JWT末尾,形成最终的JWT token。 验证JWT token的过程如下: 1. 将接收到的JWT token按点号分割为头部、载荷和签名三部分。 2. 使用相同的算法和密钥对头部和载荷进行签名,生成一个新的签名字符串。 3. 将新生成的签名字符串与接收到的签名进行比较,如果相同,则说明JWT token是有效的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值