首頁 運維 安全 介紹幾種常用的web安全認證方式

介紹幾種常用的web安全認證方式

Mar 15, 2021 am 10:40 AM
web 安全認證

介紹幾種常用的web安全認證方式

本文為大家介紹了五種常用的web安全認證方式,具有一定的參考價值,希望能對大家有幫助。

1、Http Basic Auth

這是一種最古老的安全認證方式,這種方式就是簡單的存取API的時候,帶上存取的username和password,由於資訊會暴露出去,所以現在也越來越少用了,現在都用更安全保密的認證方式,可能某些舊的平台還在用。

如下圖所示,彈出一個框,讓你填寫使用者名稱密碼。這就是Tomcat自備的HTTPBasic認證。

介紹幾種常用的web安全認證方式

這就是你存取應用程式的憑證了,那段xxxXXX字串是我寫的表示這是一段密文,這是一段什麼密文呢,就是講使用者名稱和密碼進行一個Base64加密後得到的密文。所以你現在是不是也有同感了---這tm也太容易盜取了,所以現在新的應用程式幾乎不怎麼用這種方式了,雖然簡單,但是安全等級太低了。

2、OAuth2

本人之前的部落格介紹過OAuth2 以及使用Azure AD實作OAuth2認證方式,這裡呢,還是把那篇部落格部分內容摳出來,方便大家總結看。

https://blog.csdn.net/aHardDreamer/article/details/88650939
登入後複製

OAuth 即:Open Authrization(開放授權), 它是一個開放標準,允許使用者讓第三方應用程式存取該使用者在某一網站上儲存的私密資源,而無需將使用者名稱和密碼提供給第三方。例如我們熟知的透過qq/微信/微博等登入第三方平台。 OAuth 1.0版本發布後有許多安全漏洞,所以在OAuth2.0裡面完全廢止了OAuth1.0,它關注客戶端開發者的簡易性,要么通過組織在資源擁有者和HTTP服務商之間的被批准的互動動作代表用戶,要麼允許第三方應用程式代表用戶獲得存取的權限。讀起來有點繞口,其實原理也非常簡單,請看下面講解。

一、首先我們要了解在OAuth2 認證和授權的過程中有這三個角色:

1. 服務提供者:顧名思義,提供受保護的服務和資源的,用戶在這裡面存了很多東西。

2. 使用者: 存了東西(照片,資料等)在服務提供者的人。

3. 客戶端:服務呼叫方,它要存取服務提供者的資源,需要在服務提供者註冊,不然服務提供者不鳥牠呀。

二、OAuth2 認證和授權的流程:

1)使用者想要操作存放在服務提供者的資源;

2)使用者登入用戶端,客戶端向服務提供者請求一個臨時token;

3)服務提供者驗證客戶端的身份後,給它一個臨時token;

4)客戶端獲得臨時token之後,將用戶引導至服務提供者的授權頁面,並請求使用者授權。 (在這個過程中會將臨時token和客戶端的回調連結/介面傳送給服務提供者---很明顯服務提供者到時會回來call這個介面在使用者認證並授權之後)

5 )使用者輸入使用者名稱密碼登錄,登入成功之後,可以授權客戶端存取服務提供者的資源;

6)授權成功後,服務提供者將使用者引導至客戶端的網頁(call第4步裡面的回呼連結/介面);

7)客戶端根據臨時token從服務提供者取得正式的access token;

8)服務提供者根據臨時token以及使用者的授權情況授予客戶端access token;

9)客戶端使用access token存取使用者存放在服務提供者的受保護的資源。

介紹幾種常用的web安全認證方式

三、拿access token的方法(Grant Type)有以下四種,每一種都有適用的應用情境:

1、Authorization Code (授權碼模式)

結合普通伺服器端應用程式使用。

1)使用者存取客戶端,後者將前者導向認證伺服器,假設使用者給予授權,認證伺服器將使用者導向客戶端事先指定的"重定向URI"(redirection URI),同時附上一個授權碼。

2)客戶端收到授權碼,附上早先的"重定向URI",向認證伺服器申請令牌:GET /oauth/token?response_type=code&client_id=test&redirect_uri=重定向頁面連結。請求成功返回code授權碼,一般有效時間是10分鐘。

3)認證伺服器核對了授權碼和重定向URI,確認無誤後,向客戶端發送存取權杖(access token)和更新令牌(refresh token)。 POST /oauth/token?response_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA&redirect_uri=重定向頁面連結。請求成功返回access Token和refresh Token。

介紹幾種常用的web安全認證方式

(免費學習影片分享:php影片教學

2、Implicit(簡化模式)

結合行動應用程式或 Web App 使用。

Access Token直接從授權伺服器回傳(只有前端頻道)

不支援refresh tokens

假定資源擁有者和公開客戶應用在同一個裝置上

最容易受安全攻擊

介紹幾種常用的web安全認證方式

3、Resource Owner Password Credentials

適用於受信任用戶端應用,例如同組織的內部或外部應用。

使用使用者名稱密碼登入的應用,例如桌面App

使用使用者名稱/密碼作為授權方式從授權伺服器上取得access token

一般不支援refresh token

假定資源擁有者和公開客戶在相同裝置上

介紹幾種常用的web安全認證方式

4、Client Credentials

適用於用戶端呼叫主服務API型應用(例如百度API Store,不同專案之間的微服務互相呼叫)

只有後端管道,使用客戶憑證取得一個access token

因為客戶憑證可以使用對稱或非對稱加密,該方式支援共享密碼或證書

介紹幾種常用的web安全認證方式

3、Cookie-Session Auth

Cookie-Session 認證機制在我們初學J2EE的時候接觸的比較多,就是為一次請求認證在服務端創建一個Session對象,同時在客戶端的瀏覽器端創建了一個Cookie對象;透過客戶端帶上來Cookie對象來與伺服器端的session對象匹配來實現狀態管理的。預設的,當我們關閉瀏覽器的時候,cookie會被刪除。但可以透過修改cookie 的expire time使cookie在一定時間內有效;

但是這種基於cookie-session的認證使應用程式本身很難擴展,隨著不同客戶端用戶的增加,獨立的伺服器已無法承載更多的用戶,而這時候基於session認證應用的問題就會暴露出來。

基於session認證所顯露的問題:

1)Session 增多會增加伺服器開銷

每個使用者經過我們的應用認證之後,我們的應用程式都要在服務端做一次記錄,以方便用戶下次請求的鑑別,通常而言session都是保存在記憶體中,而隨著認證用戶的增多,服務端的開銷會明顯增大。

2)分散式或多伺服器環境中適應性不好

用戶認證之後,服務端做認證記錄,如果認證的記錄被保存在記憶體中的話,這表示用戶下次請求還必須要請求在這台伺服器上,這樣才能拿到授權的資源,這樣在分散式的應用上,相應的限制了負載平衡器的能力。這也意味著限制了應用的擴展能力。不過,現在某些伺服器可以透過設定黏性Session,來做到每台伺服器之間的Session共享。

3)容易遭到CSRF攻擊

因為是基於cookie來進行使用者識別的, cookie如果被截獲,使用者就會很容易受到跨站請求偽造的攻擊

4、Token Auth

基於token的鑑權機制類似於http協定也是無狀態的,它不需要在服務端去保留使用者的認證資訊或會話資訊。這就意味著基於token認證機制的應用程式不需要去考慮使用者在哪一台伺服器登入了,這就為應用程式的擴充提供了便利。

流程:

使用者使用使用者名稱密碼來請求伺服器

伺服器進行驗證使用者的資訊

伺服器透過驗證傳送給使用者一個token

客戶端儲存token,並在每次要求時附上這個token值

服務端驗證token值,並傳回資料

這個token必須在每次要求時傳遞給服務端,它應該保存在請求頭裡, 另外,服務端要支援CORS(跨來源資源共享)策略,一般我們在服務端這麼做就可以了Access-Control-Allow-Origin。

介紹幾種常用的web安全認證方式

5、JWT 認證機制(Json Web Token)

JWT作為一個開放的標準(RFC 7519),定義了一種簡潔的,自包含的方法用於通訊雙方之間以Json物件的形式安全的傳遞訊息。因為數位簽章的存在,這些資訊是可信的,JWT可以使用HMAC演算法或是RSA的公私秘鑰對進行簽章。

簡潔性

可以透過URL,POST參數或在HTTP header發送,因為資料量小,傳輸速度也很快

自包含性

負載中包含了所有使用者所需的信息,避免了多次查詢資料庫

下列場景中使用JSON Web Token是很有用的:

Authorization (授權) : 這是使用JWT最常見的場景。一旦使用者登錄,後續每個請求都將包含JWT,允許使用者存取該令牌允許的路由、服務和資源。單一登入是現在廣泛使用的JWT的特性,因為它的開銷很小,並且可以輕鬆地跨網域使用。

Information Exchange (資訊交換) : 對於安全的在各方之間傳輸資訊而言,JSON Web Tokens無疑是一種很好的方式。因為JWTs可以被簽名,例如,用公鑰/私鑰對,你可以確定發送人就是它們所說的那個人。另外,由於簽名是使用頭和有效負載計算的,您也可以驗證內容沒有被竄改。

JWT的結構:

介紹幾種常用的web安全認證方式

透過這張圖,很清楚看出JWT的結構分為三部分,他們之間用「.」連接:

Header:

header典型的由兩部分組成:token的型別(「JWT」)和演算法名稱(例如:HMAC SHA256或RSA等等)。

例如:

介紹幾種常用的web安全認證方式

然後,用Base64對這個JSON編碼就得到JWT的第一部分

Payload:

JWT的第二部分是payload,它包含聲明(要求)。聲明是關於實體(通常是使用者)和其他資料的聲明。聲明有三種類型: registered, public 和 private。

Registered claims : 這裡有一組預先定義的聲明,它們不是強制的,但是推薦。如:iss (issuer), exp (expiration time), sub (subject), aud (audience)等。

Public claims : 可以隨意定義。

Private claims : 用於在同意使用它們的各方之間共享信息,並且不是註冊的或公開的聲明。

下面是一個例子:

介紹幾種常用的web安全認證方式

對payload進行Base64編碼就得到JWT的第二部分

注意,不要在JWT的payload或header中放置敏感訊息,除非它們是加密的。

Signature:

為了得到簽章部分,你必須有編碼過的header、編碼過的payload、一個秘鑰,簽章演算法是header中指定的那個,然對它們簽章即可。

例如:

HMACSHA256(base64UrlEncode(header) "." base64UrlEncode(payload), secret)

#簽章是用來驗證訊息在傳遞過程中有沒有被更改,並且,對於使用私鑰簽署的token,它還可以驗證JWT的發送者是否為它所稱的發送方。

碰到JWT token可以去JWT官網解密看看,下面這是官網解密出來的數據,可以很清楚的看到它的三部分內容:

介紹幾種常用的web安全認證方式

更多關於JWT的內容,可以前往這個部落格:

https://www.cnblogs.com/cjsblog/p/9277677.html

參考:

https://www.jianshu.com/p/f8c43dcd8b69

#https://blog.csdn.net/alan_liuyue/article/details/88183267

https://www .cnblogs.com/cjsblog/p/9277677.html

相關建議:web伺服器安全

以上是介紹幾種常用的web安全認證方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Nginx的Web伺服器caddy怎麼使用 Nginx的Web伺服器caddy怎麼使用 May 30, 2023 pm 12:19 PM

Caddy簡介Caddy是一款功能強大,擴展性高的Web伺服器,目前在Github上已有38K+Star。 Caddy採用Go語言編寫,可用於靜態資源託管和反向代理。 Caddy具有以下主要特性:比較Nginx複雜的配置,其獨創的Caddyfile配置非常簡單;可以透過其提供的AdminAPI實現動態修改配置;預設支援自動化HTTPS配置,能自動申請HTTPS憑證並進行配置;能夠擴展到數以萬計的站點;可以在任意地方執行,沒有額外的依賴;採用Go語言編寫,內存安全更有保證。安裝首先我們直接在CentO

Java API 開發中使用 Jetty7 進行 Web 伺服器處理 Java API 開發中使用 Jetty7 進行 Web 伺服器處理 Jun 18, 2023 am 10:42 AM

JavaAPI開發中使用Jetty7進行Web伺服器處理隨著互聯網的發展,Web伺服器已經成為了應用程式開發的核心部分,同時也是許多企業所關注的焦點。為了滿足日益增長的業務需求,許多開發人員選擇使用Jetty進行Web伺服器開發,其靈活性和可擴展性受到了廣泛的認可。本文將介紹如何在JavaAPI開發中使用Jetty7進行We

Web 端即時防擋臉彈幕(基於機器學習) Web 端即時防擋臉彈幕(基於機器學習) Jun 10, 2023 pm 01:03 PM

防擋臉彈幕,即大量彈幕飄過,但不會遮擋視訊畫面中的人物,看起來像是從人物背後飄過去的。機器學習已經火了好幾年了,但很多人都不知道瀏覽器中也能運行這些能力;本文介紹在視頻彈幕方面的實踐優化過程,文末列舉了一些本方案可適用的場景,期望能開啟一些腦洞。 mediapipeDemo(https://google.github.io/mediapipe/)展示主流防擋臉彈幕實現原理點播up上傳視訊伺服器後台計算提取視訊畫面中的人像區域,轉換成svg儲存用戶端播放視訊的同時,從伺服器下載svg與彈幕合成,人像

怎麼設定nginx保證frps伺服器與web共用80埠 怎麼設定nginx保證frps伺服器與web共用80埠 Jun 03, 2023 am 08:19 AM

首先你會有個疑惑,frp是什麼呢?簡單的說frp就是內網穿透工具,配置客戶端以後,可以透過伺服器來存取內部網路。現在我的伺服器,已經用nginx做站了,80端口只有一個,那如果frp的服務端也想使用80端口,那該怎麼辦呢?經過查詢,這個是可以實現的,就是利用nginx的反向代理來實現。補充一下:frps就是伺服器端(server),frpc就是客戶端(client)。第一步:修改伺服器中nginx.conf設定檔在nginx.conf中http{}裡加入以下參數,server{listen80

如何使用Golang實作網頁應用程式的表單驗證 如何使用Golang實作網頁應用程式的表單驗證 Jun 24, 2023 am 09:08 AM

表單驗證是Web應用程式開發中非常重要的環節,它能夠在提交表單資料之前對資料進行有效性檢查,避免應用程式出現安全漏洞和資料錯誤。使用Golang可以輕鬆實現網頁應用程式的表單驗證,本文將介紹如何使用Golang來實作網頁應用程式的表單驗證。一、表單驗證的基本要素在介紹如何實作表單驗證之前,我們需要知道表單驗證的基本要素是什麼。表單元素:表單元素是指

如何從駕駛艙Web使用者介面啟用管理訪問 如何從駕駛艙Web使用者介面啟用管理訪問 Mar 20, 2024 pm 06:56 PM

Cockpit是一個面向Linux伺服器的基於Web的圖形介面。它主要是為了使新用戶/專家用戶更容易管理Linux伺服器。在本文中,我們將討論Cockpit存取模式以及如何從CockpitWebUI切換Cockpit的管理存取。內容主題:駕駛艙進入模式查找當前駕駛艙訪問模式從CockpitWebUI啟用Cockpit的管理訪問從CockpitWebUI禁用Cockpit的管理訪問結論駕駛艙進入模式駕駛艙有兩種訪問模式:受限訪問:這是駕駛艙的默認訪問模式。在這種存取模式下,您無法從駕駛艙Web用戶

web標準是什麼東西 web標準是什麼東西 Oct 18, 2023 pm 05:24 PM

Web標準是一組由W3C和其他相關組織制定的規範和指南,它包括HTML、CSS、JavaScript、DOM、Web可訪問性和性能優化等方面的標準化,透過遵循這些標準,可以提高頁面的兼容性、可訪問性、可維護性和效能。 Web標準的目標是使Web內容能夠在不同的平台、瀏覽器和裝置上一致地展示和交互,提供更好的使用者體驗和開發效率。

PHP在Web開發中是屬於前端還是後端? PHP在Web開發中是屬於前端還是後端? Mar 24, 2024 pm 02:18 PM

PHP在Web開發中是屬於後端。 PHP是一種伺服器端腳本語言,主要用於處理伺服器端的邏輯,產生動態網頁內容。與前端技術相比,PHP更多地用於與資料庫互動、處理使用者請求以及生成頁面內容等後端操作。接下來透過具體的程式碼範例來說明PHP在後端開發中的應用。首先,我們來看一個簡單的PHP程式碼範例,用於連接資料庫並查詢資料:

See all articles