認證(Authentication)是證實用戶身份的過程,是爲了解決 "Who are you?" 的問題,即在應用中誰能證實他就是他本人。使用特定系統時,身份驗證是必不可少的機制。沒有正確的身份驗證就很難識別用戶。在認證過程當中,通常須要認證者提供與他們身份信息相關的一些標識信息來代表他就是他本人,如提供身份證,用戶名/密碼來證實。html
閱讀更多關於 Angular、TypeScript、Node.js/Java 、Spring 等技術文章,歡迎訪問個人我的博客 —— 全棧修仙之路
例如,有一個發送方 A 經過互聯網向接收方 B 發送電子文檔。系統將如何識別發送方 A 已發送給接收方 B 的專用消息。入侵者 C 可能會攔截,修改和重播文檔以欺騙或竊取此類攻擊,這些信息被稱爲僞造。java
在給定狀況下,身份驗證機制可確保兩件事:首先,它確保發送者和接收者都是合法的人,這就是所謂的數據來源身份驗證。其次,它藉助私密會話密鑰確保了發送者和接收者之間已創建的鏈接的安全性,從而沒法推斷出該鏈接,這被稱爲對等實體身份驗證。數據庫
受權技術用於肯定授予已認證用戶的權限。簡而言之,它檢查是否容許用戶訪問特定資源。受權發生在身份驗證以後,在此以前先肯定用戶的身份,而後經過查找存儲在表和數據庫中的條目來肯定用戶的訪問列表。安全
例如,用戶 A 但願訪問服務器上特定的資源文件。首先用戶 A 將向服務器發送請求,接收到用戶 A 的請求以後,服務器會先驗證用戶 A 的身份。若用戶 A 經過身份驗證,以後服務器將找到用戶 A 所具備的相應權限,判斷用戶 A 是否有訪問所請求資源文件的權限。通常狀況下,資源的訪問權限能夠包括查看,修改或刪除等。服務器
(圖片來源 —— https://www.ilantus.com/blog/...)ide
前面咱們已經介紹了認證和受權的定義,下面咱們來看一下它們之間的主要區別。學習
(圖片來源 —— https://techdifferences.com/d...)spa
身份認證和受權是確保系統信息安全的兩種機制。身份認證和受權之間的區別在於,身份認證是檢查用戶詳細信息以識別其授予系統訪問權限的過程,而受權則是檢查通過身份驗證的用戶訪問系統資源的特權或權限的過程。code
身份(Principal),即主體的標識屬性,能夠是任何東西,如用戶名、郵箱等,惟一便可。一個主體能夠有多個principal,但只有一個 Primary principal,通常是用戶名/密碼/手機號。htm
在 Spring Security 中,咱們能夠將每一個 GrantedAuthority 視爲一個單獨的特權。好比 READ_AUTHORITY,WRITE_PRIVILEGE 甚至 CAN_EXECUTE_AS_ROOT。
當直接使用 GrantedAuthority 時,例如經過使用諸如 hasAuthority('READ_AUTHORITY')
之類的表達式,咱們將以細粒度的方式限制訪問。
@Override protected void configure(HttpSecurity http) throws Exception { .antMatchers("/protectedbyauthority").hasAuthority("READ_PRIVILEGE") }
相似地,在 Spring Security 中,咱們能夠將每一個 Role 視爲一個粗粒度的 GrantedAuthority ,此種 GrantedAuthority 以 ROLE 爲前綴的字符串表示。當直接使用 Role 時,可以使用 hasRole("ADMIN")
之類的表達式,咱們將以粗粒度方式限制訪問。值得注意的是,默認的 "ROLE" 前綴是可配置的。
@Override protected void configure(HttpSecurity http) throws Exception { .antMatchers("/protectedbyrole").hasRole("USER") }