关于app登录认证

app的登录认证也都是从web借鉴过来的,其实和web没什么区别。

比较传统的是 cookie + session ,后台要维护用户的 session,客户端通过 cookie 携带 session_id 来标识一个用户。这种方式要在后台维护 session。

而现在接口一般都是 REST API,http 本身也是无状态的,所以现在app一般采用 token 的方式来进行登录认证。

用户第一次登录时后台根据用户信息(一般是用户ID)生成一个 token 返回给客户端,之后客户端每个请求都携带上这个 token (一般通过 header),服务端通过验证 token 来唯一标识一个用户。

如果用户的 token 泄露,用户的信息也就都泄露了,为了安全现在 HTTPS 基本也是标配了。

token 的生成和验证可以自己实现,也可以用现成的解决方案,推荐 JWT (JSON WEB TOKEN)

JWT 是一个字符串由 3 部分组成 header payload signature,中间通过 . 隔开

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJuaW5naGFvLm5ldCIsImV4cCI6IjE0Mzg5NTU0NDUiLCJuYW1lIjoid2FuZ2hhbyIsImFkbWluIjp0cnVlfQ.SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc

header 存储加密算法
payload 存储用户信息,一般包括用户ID
signature 是用header 中的加密算法 对 header 和 payload 用 secret 进行加盐加密后的签名

secret 存储在服务端,secret 一旦泄露用户信息就泄露了。

服务端生成 jwt 后返回给客户端,客户端每次请求都带着 token, 服务端收到 token 后会取出 header 和 payload 重新签名跟 token 中签名进行对比,若一致认证成功,从 payload 中取出用户信息。若不一致说明 token 被篡改过认证失败。

客户端一般通过请求头 Authorization 携带 token

 'Authorization': 'Bearer ' + token

payload 中不能存储敏感信息,因为 header 和 payload 都只是进行了简单的 base64 编码

你可能感兴趣的:(关于app登录认证)