安卓客户端访问服务器接口的登录认证的一种实现方式

sessionId的生成和利用

浏览器在第一次请求服务器时,服务器响应请求的同时会生成一个sessionId返回给浏览器,这个sessionId会保存在浏览器的cookie中,由于浏览器测试不太方便,使用POSTMAN代替。浏览器端如下:

服务器端如下:

很明显能够看出来,sessionId架起了客户端与服务器的沟通桥梁,使得辨别请求用户身份成为了可能。客户端在请求后会保存sessionId到cookie中,而服务器端也可以在sessionId指向的session中保存一些用户信息。不同用户每创建一个连接,都将会生成一个session实例,服务器如何分辨谁是谁呢?那就是靠客户端发送请求过来的sessionId了。

安卓访问服务器遇到的问题

不同于浏览器访问服务器,android手机端在访问服务器时,http请求头部是没有sessionID的,而sessionID是识别用户身份的一条途径,安卓没有sessionId,就对用户身份识别造成了困难。

解决方案

无意中发现POSTMAN中有一栏这么个东西:

经过一番了解得知,Authorization用来验证是否拥有从服务器访问所需数据的权限。当发送请求时,通常必须包含参数,以确保请求具有访问和返回所需数据的权限。Postman提供了授权类型,可以轻松地在Postman本地应用程序中处理身份验证协议。

点击打开发现有12种类型,进一步发现其中有个Bearer Token的选项,看起来跟token作用很像啊。原来这是一个安全令牌,任何带有此参数的用户都可以用它访问服务器资源。

以上信息对我来说足够用了,于是构想了整个流程:

1.如果安卓端请求的就是登录接口,那么配置的拦截器对这个接口直接放行即可;放行后,服务端接收到登录请求,响应同时使用加密工具生成一段密文保存后返回给前端;

2.前端再次请求时,把Bearer Token数据放入header的Bearer Token中传给后端;

3.安卓端发送请求到后端,经登录拦截器拦截请求,取出Bearer Token和服务器存放的Bearer Token进行比较,如果相同,放行;不存在,则说明登录信息失效或者未登录,返回需要登录的信息;

实现

安卓端这里不多赘述,主要说明一下服务端的处理过程。

重点看一下拦截器的红框处即可,这里对token做了判断取值并比较,是因为项目涉及到了不同的登录终端,一个是普通的网页访问登录,另外一个就是安卓登录获取token的实现,通过调用初始化的用户数据进行对比判断是哪种终端登录的。

经过测试,服务器端是可以拿到这个值。如下:

登录接口对加密工具生成的token进行了保存并返回(不保存的话实时加密对比也是可以的,或者凭证入库更方便点),通过怎样的方式返回给客户端可以放入响应体或者响应头中,具体选择根据需要。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值