天天看點

yii2 擷取同一個賬号登入的所有session_微信登入與令牌Token的意義與作用微信身份驗證體系

Token的意義與作用

有些接口是可以公開通路的,比如平台首頁的接口,有些接口是不能公開通路的,比如客戶賬戶的操作。

對于接口來說,需要确定使用者的身份,那麼就涉及到使用者登入,然而在API中不存在使用者登入這個概念,我們是使用令牌來控制使用者的身份,也就是将傳統網站中使用者登入的這個操作轉換為使用者來擷取一個令牌,這個令牌代表着使用者的身份,而且這個身份是分級别的,也就是登入就是擷取令牌。

擷取令牌的過程(登入)

yii2 擷取同一個賬号登入的所有session_微信登入與令牌Token的意義與作用微信身份驗證體系

攜帶令牌通路接口的過程

yii2 擷取同一個賬号登入的所有session_微信登入與令牌Token的意義與作用微信身份驗證體系

Token有三個層面的驗證:

  • 是否攜帶了合法的token
  • 權限auth是否正确
  • 是否在有效期内

微信身份驗證體系

yii2 擷取同一個賬号登入的所有session_微信登入與令牌Token的意義與作用微信身份驗證體系

現在的用戶端是小程式,可以自己設計一套賬号體系來擷取令牌,但是小程式已經提供了一套微信認證體系,沒有必要再小程式裡面設計自己的賬号密碼。小程式可以為每個登入的使用者生成一個code,code就是一個數字碼,我們需要将這個碼傳向getToken接口,這個code碼是一個去微信的伺服器去換取使用者的身份的辨別,微信伺服器在接收到code碼之後會傳回兩個重要的資訊openid和session_key,openid就是使用者身份的辨別,session_key的作用是在小程式中直接通路微信伺服器拿到一個加密資訊,如果要解密這個資訊就需要用到session_key,這個資訊包括unique_id,這個ID表示的也是使用者唯一辨別,與openid的差別是,openid是一個使用者針對一個小程式有一個openid,也就是說一個使用者在不用的小程式中的openid是不同的就算小程式是同一個賬戶下的,而user_id在同一個賬号下注冊的小程式,使用者的unique_id都是相同的,也就是可以跨不用的應用(不同小程式的關聯)。

openid的作用:

  • 使用者的唯一辨別
  • 一些功能性的作用比如微信支付
  • openid需要在資料庫存起來

不能把openid傳回到小程式裡去:

  • 這是使用者身份的敏感資訊
  • openid是固定不變的,沒有失效期(是以需要令牌,讓令牌有有效期,根據這個令牌去請求opendi進而間接的拿到openid)

為了減輕資料庫的壓力,我們可以借助緩存機制把令牌存在緩存中以減輕伺服器的壓力加快使用者查詢速度(注意openid是存在資料庫中的)。