jwt vs session 以rails 爲例 (翻譯部分)

原文地址:https://pragmaticstudio.com/tutorials/rails-session-cookies-for-api-authentication   前端

 

普通方式: 令牌爲基礎的驗證

這種一般的形式爲JSON Web Token(JWT),邏輯是這樣的json

1. 第一步向登陸的接口發送post請求

請求相似於api

POST /auth
Host: api.your-app.com
Content-Type: application/json

{
  "username": "mike",
  "password": "supersecret"
}

 

2. 後臺驗證,若是驗證經過會返回一個json令牌

例如:{ "token":"eyJhbGciOiJIUzI1NiJ9" }

3.  前端會將令牌存儲到本地,每次發起請求都會帶着這個令牌以示身份。最通用的辦法是放在請求頭。 這裏能夠參考rails的knock

GET /my-stuff
Host: api.your-app.com
Authorization: eyJhbGciOiJIUzI1NiJ9

4. 後臺驗證令牌,保證敏感數據被合法操做

 

缺點

token要存儲在本地。存儲在前端本地一般會用到localStorage方法。這個方法容易被xss攻擊瀏覽器

 

另外一種經常使用的方法session

1. 發送post請求

2. 若是驗證經過保存session

session[:user_id] = user.id

3. 帶着session cookie返回請求

Status: 200
Content-Type: application/json
Set-Cookie: _session_id=kTNmUk23l0xxXyDB7rPCcEl6yVet1ahaofUJLd6DxS1XrhbPvU4gF%2B%2BmeMJ%2B4CDYXCcKWssfTM8VzE6YlDnaiVT1iTjg8YRx8DIjFO0BoC%2FT8He09iS5k%2FpBJFD7GD120plb7vxOGkqRWuT1egok6rS7sAQsK21MRIXDFlQJ6QJR3EZycU9CsuV9iHxKZP0UlfHcPQpqUTBDCetoF4PKFNcn%2FzPi0P0%2BunQq5i6YTyXFvaXIks0azNJnXXyFX%2FnAdiaNAFsHAsbhHO5zaHQ%2BxFWbkphV4O42p4s4--gS%2BPgAF3t14Nu6AX--J9MVefd84BIjxylRqjNT2g%3D%3D; path=/; HttpOnly

HttpOnly保證了session不會被js程序拿到,防止xss攻擊cookie

 

4. 瀏覽器會保存cookie每次訪問接口會帶着令牌

GET /my-stuff
Host: api.your-app.com
Cookie: _session_id=kTNmUk23l0xxXyDB7rPCcEl6yVet1ahaofUJLd6DxS1XrhbPvU4gF%2B%2BmeMJ%2B4CDYXCcKWssfTM8VzE6YlDnaiVT1iTjg8YRx8DIjFO0BoC%2FT8He09iS5k%2FpBJFD7GD120plb7vxOGkqRWuT1egok6rS7sAQsK21MRIXDFlQJ6QJR3EZycU9CsuV9iHxKZP0UlfHcPQpqUTBDCetoF4PKFNcn%2FzPi0P0%2BunQq5i6YTyXFvaXIks0azNJnXXyFX%2FnAdiaNAFsHAsbhHO5zaHQ%2BxFWbkphV4O42p4s4--gS%2BPgAF3t14Nu6AX--J9MVefd84BIjxylRqjNT2g%3D%3D

5. 後臺驗證令牌,保證敏感數據被合法操做

相關文章
相關標籤/搜索