问一个前端和后端的身份认证问题
比如开发一个小程序,小程序会返回一个 openid,正常操作是后端直接用这个 openid 作为登录的用户吗?还是自己去生成一个 token 给前端用?
我现在是这样做的,后端拿到 openid 直接存 session 里,判断 session 有没有值,有值就是登录了,我这样操作对不对?
小作坊的方式,行得通 work 可以。
但是良好的设计,是自己有一个完整的 token 体系,openid 作为 微信小程序过来的身份信息(等同于微信上的身份证),加到当前用户的 profile 里,继续返回 token。
用户的敏感信息不应该随意存储。openid 就像指纹一样唯一,没有谁会把自己的指纹到处贴,存档。
有了拓展体系,未来你还可以接入 google、oauth、第三方、支付宝……
好的设计是这样
给客户端用于认证的最好是一个短期的 access token 和一个稍微长期点的 refresh token.
和你说一下我之前的做法,拿到 openid 后
payload = {session_key: result_json["session_key"], openid: result_json["openid"]} # 获取到的信息 payload = {user_id: 1, token_time: 12345678}.merge(payload) # 使用小程序密钥加密一下 token = JWT.encode payload, applet_secret, 'HS256'
将 最终的 token 返回给前端,你直接存在 session 不行,需要用 token 做解密后判断能不能登录
#3 楼 @528070506 JWT 是哪里来的?
gem 'jwt'