久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      http無狀態(tài)和鑒權(quán)解決四種方案解析

      http協(xié)議本身是無狀態(tài)的,但是在實際的web開發(fā)中常有一些操作需要有狀態(tài).比如想要訪問一些私人訪問權(quán)限的文章,或者這種操作需要明確當前用戶身份.

      顯然,最簡單的方案就是每次都發(fā)送賬戶和密碼,但是這樣重復(fù)操作用用戶并不友好,對服務(wù)器頁增添了額外的壓力.為了解決無狀態(tài)帶來的鑒權(quán)問題,一般有以下幾種解決方案:cookie、session、token.至于標題中提及的outh2、jwt本質(zhì)上也是token方案.

      http無狀態(tài)和鑒權(quán)解決四種方案解析

      cookie

      Cookie是儲存在客戶端的一串字符,一般說來大小不超過4kb.比如我們常見的記住密碼功能,或者一些基于之前輸入的提醒和默認配置,就是通過cookie來實現(xiàn)的,cookie簡單說來就是一種本地存儲方法.但是這里存儲的信息常用來進行鑒權(quán)操作.cookie只能保存文本信息,瀏覽器可以禁止cookie.cookie的期限可以被自由設(shè)定,可以是僅僅一次瀏覽起效,也可以長達一年.如果是短期的,那么這些信息會被存儲在內(nèi)存中,如果是長期則會存儲在硬盤上.cookie的起效范圍是路徑下的所有子路徑.不允許其他來源的訪問.

      單純的采用cookie來認證身份會帶來一個比較麻煩的問題,就是偽造比較容易.因為這樣處理,cookie中必然要帶有身份信息,但是服務(wù)器也要解析這個身份信息,所以必然要在原理上支持雙向的編碼和解碼,那么這個信息很容易被破解和進一步偽造.想一想,如果想要解決這個問題,我們常用的方案應(yīng)該是加一個secret,而這個secret應(yīng)該是放在服務(wù)器上的,服務(wù)器返回這樣一個帶有secret編碼的字符串,而在服務(wù)器端再帶上這個secret反向解密,如此一來,問題不就解決了嗎確實如此,但是這不代表cookie就安全,因為這已經(jīng)不叫cookie了,而是我們要講的第二個對象:session.

      session

      通過上面說的東西,我們已經(jīng)能夠獲得身份信息,額外的,我們還可以把更復(fù)雜形式的信息都存儲進來,因為這里沒有cookie的純文本限制.但是剛才說的帶有secret編碼的字符串也就是sessionid,依然要存儲在客戶端.是不是意味著session必定要依賴cookie呢不是!想一想,我們實際上需要的是在每一次請求(至少是需要判定身份狀態(tài)的請求中),都帶上這個字符串,我們有以下這幾種解決方案:

      cookie 表單隱藏字段:在form中放置一個隱藏的域 url重寫:在url后邊加上session的query段

      Session也可以設(shè)定有效時間.其實際的存儲可以在內(nèi)存、緩存、文件中.通過類似//可能具體實現(xiàn)不同.//hash表的數(shù)據(jù)結(jié)構(gòu)存儲.cookie是一個存在的實體,session是一種機制.

      token

      對token的理解還不夠,可能多有紕漏之處,待之后再進行修改.

      使用基于 Token 的身份驗證方法,在服務(wù)端不需要存儲用戶的登錄記錄。大概的流程是這樣的:

      客戶端使用用戶名跟密碼請求登錄 服務(wù)端收到請求,去驗證用戶名與密碼 驗證成功后,服務(wù)端會簽發(fā)一個 Token,再把這個 Token 發(fā)送給客戶端
      客戶端收到 Token 以后可以把它存儲起來,比如放在 Cookie 里或者 Local Storage 里 客戶端每次向服務(wù)端請求資源的時候需要帶著服務(wù)端簽發(fā)的 Token 服務(wù)端收到請求,然后去驗證客戶端請求里面帶著的 Token,如果驗證成功,就向客戶端返回請求的數(shù)據(jù)

      可以看出來,這里的token與sessionid有些類似,其區(qū)別:

      sessionid是帶著之前的狀態(tài)的,在服務(wù)器端可以getSession(sessionid) token是在登錄驗證之后發(fā)放的一個包含著用戶基本信息的較長的字符串,用處是驗證身份以及簡化后續(xù)獲取信息的難度. token機制更靈活,可以實現(xiàn)跨域

      jwt

      Jwt簡單說來是一種token的具體實現(xiàn)規(guī)范!

      Jwt標準的token有三個部分,中間用點分隔開,并且都會使用 Base64 編碼:

      header。header 部分主要是兩部分內(nèi)容,一個是 Token 的類型,另一個是使用的算法 Payload。里面是 Token 的具體內(nèi)容,這些內(nèi)容里面有一些是標準字段,你也可以添加其它需要的內(nèi)容 Signature。編碼以上兩個部分并且加入一個secret使用信息摘要算法得出一個字符串

      oauth2

      簡單來說,oauth是用來向第三方平臺提供可以細致的權(quán)限管理的一種方案.
      如何直接向第三方提供賬號和密碼,可能存在的問題有:

      不安全 無法更細致的限制授權(quán)范圍和有效期 只有修改密碼才能收回權(quán)限 一個第三方程序被破解將會導(dǎo)致用戶密碼泄漏

      OAuth的基本思路如下:

      OAuth在”客戶端”與”服務(wù)提供商”之間,設(shè)置了一個授權(quán)層(authorization layer)。”客戶端”不能直接登錄”服務(wù)提供商”,只能登錄授權(quán)層,以此將用戶與客戶端區(qū)分開來。”客戶端”登錄授權(quán)層所用的令牌(token),與用戶的密碼不同。用戶可以在登錄的時候,指定授權(quán)層令牌的權(quán)限范圍和有效期。”客戶端”登錄授權(quán)層以后,”服務(wù)提供商”根據(jù)令牌的權(quán)限范圍和有效期,向”客戶端”開放用戶儲存的資料。

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號