身份验证协议和java安全框架
一、身份驗證協議
1、OAuth
????????關于 OAuth實際上是什么存在很多混淆。有些人認為 OAuth 是一種登錄流程(例如,當您使用 Google Login 登錄應用程序時),有些人認為 OAuth 是一種“安全性的東西”。
????????首先,OAuth不是API 或服務:它是授權的開放標準,任何人都可以實現它。
????????更具體地說,OAuth 是應用程序可用來為客戶端應用程序提供“安全委托訪問”的標準。OAuth通過HTTPS工作,并使用訪問令牌而不是憑據對設備、API、服務器和應用程序進行授權。????????
????????如今,OAuth 2.0 是使用最廣泛的 OAuth 形式。所以,當提起“OAuth”時,指的是OAuth2.0。
OAuth Community Sitehttps://oauth.net/????????OAuth 定義了四個角色:
????????資源所有者:能夠授予對受保護資源的訪問權限的實體。當資源所有者是一個人時,它被稱為最終用戶。
????????資源服務器:托管受保護資源的服務器,能夠接受并使用訪問令牌響應受保護的資源請求。
????????客戶:代表受保護資源請求的應用程序資源所有者及其授權。“客戶”一詞確實不暗示任何特定的實現特征(例如,應用程序是否在服務器、桌面或其他設備上執行設備)。
????????授權服務器:服務器成功后向客戶端頒發訪問令牌驗證資源所有者并獲得授權。
????????OAuth 2.0是一個框架,用于控制對受保護資源(例如應用程序或一組文件)的授權。OAuth 有點像房子的規則,它規定了一個人在里面可以做什么和不能做什么。?
? ? ? ? 比如.net core的auth2框架ids4。全稱:IdentityServer4。或者Java的spring security也支持auth2。
2、SAML
????????SAML全稱是安全斷言標記語言(Security Assertion Markup Language)是一個基于XML的開源標準數據格式。用于在不同的安全域之間交換認證和數據授權。在SAML標準定義了身份提供者(IDP)和服務提供者(SP),這兩者構成了前面所說的不同的安全域。 SAML是OASIS組織安全服務技術委員會(Security Services Technical Committee)的產品。
????????SAML解決的最重要的需求是Web端應用的單點登錄(SSO)。
????????SAML 協議主要有三個角色:
????????SP(Service Provider):向用戶提供服務的web 端應用。
????????IDP(Identity Provide):向SP提供用戶身份信息
????????用戶:通過登錄IDP獲取身份斷言,并向SP返回身份斷言來使用SP提供的服務。
????????SAML 有點像房門鑰匙。它允許您訪問該設施。
3、OpenID Connect?
????????OpenID Connect 基于 OAuth 2.0 協議構建,并使用稱為 ID 令牌的附加 JSON Web 令牌 (JWT) 來標準化 OAuth 2.0 留給選擇的區域,例如范圍和端點發現。它特別專注于用戶身份驗證,并廣泛用于在消費者網站和移動應用程序上啟用用戶登錄。
????????它允許客戶端根據授權服務器執行的身份驗證驗證最終用戶的身份,并以可互操作和類似 REST 的方式獲取有關最終??用戶的基本配置文件信息。
????????OpenID Connect 允許所有類型的客戶端(包括基于 Web、移動和 JavaScript 的客戶端)請求和接收有關經過身份驗證的會話和最終用戶的信息。該規范套件是可擴展的,允許參與者在對他們有意義的情況下使用可選功能,例如身份數據加密、OpenID 提供者發現和會話管理。
OpenID Connect | OpenIDhttps://openid.net/connect/????????oAuth2.0協議是用來獲取對受保護的資源比如某些web api調用所需的access token的。OpenID Connect則利用了oAuth2.0的這個流程來允許RP(三方應用)獲取用戶的身份信息。這些信息是以JWT形式進行交互的id token。同時,OpenID Connect還允許RP用獲取id token時由OP一并返回的access token來進一步獲取用戶的個人信息,比如email、手機號碼等。
? ? ? ? 非常常見的就是我們經常使用的是第三方登陸等。
4、kerberos
????????Kerberos (KRB5) 是一種成熟、靈活、開放且非常安全的網絡身份驗證協議。Kerberos 包括身份驗證、相互身份驗證、消息完整性以及機密性和委托功能。它旨在通過使用密鑰加密技術為客戶端/服務器應用程序提供強身份驗證。麻省理工學院可免費實施該協議。Kerberos 也可用于許多商業產品。
? ? ? ? MIT的Kerberos網址。
Kerberos: The Network Authentication Protocolhttps://web.mit.edu/kerberos/????????Kerberos 由 MIT 創建,用于解決網絡安全問題。Kerberos 協議使用強加密,因此客戶端可以通過不安全的網絡連接向服務器證明其身份(反之亦然)。在客戶端和服務器使用 Kerberos 證明他們的身份之后,他們還可以加密他們的所有通信,以確保他們開展業務時的隱私和數據完整性。
? ? ? ? Kerberos提供了一個集中的認證服務器。在 Kerberos 中,身份驗證服務器和數據庫用于客戶端身份驗證。Kerberos 作為第三方可信服務器運行,稱為密鑰分發中心 (KDC)。網絡上的每個用戶和服務都是一個主體。?
????????Kerberos 的主要組件有:
????????身份驗證服務器 (AS):身份驗證服務器執行票證授予服務的初始身份驗證和票證。?
?
????????數據庫:Authentication Server 驗證用戶在數據庫中的訪問權限。?
?
????????Ticket Granting Server (TGS):Ticket Granting Server 為服務器簽發票據?
????????基本步驟
? ? ? ? 1、客戶端從密鑰分發中心 (KDC) 請求身份驗證票 (TGT)。
? ? ? ? 2、KDC 驗證憑據并發回加密的 TGT 和會話密鑰。
? ? ? ? 3、客戶端請求訪問服務器上的應用程序。應用程序服務器的票證請求被發送到由客戶端的 TGT 和身份驗證器組成的 KDC。
? ? ? ? 4、KDC 向用戶返回票證和會話密鑰。
? ? ? ? 5、票證被發送到應用程序服務器。一旦收到票證和身份驗證器,服務器就可以對客戶端進行身份驗證。
? ? ? ? 6、服務器使用另一個身份驗證器回復客戶端。接收到這個驗證器后,客戶端可以驗證服務器。
? ? ? ? 要是使用Kerberos,必須單獨修改每個應用。
????????盡管 Kerberos 在數字世界中隨處可見,但它通常用于依賴強大的身份驗證和審計功能的安全系統中。Kerberos 用于 Posix、Active Directory、NFS 和 Samba 身份驗證。它也是 SSH、POP 和 SMTP 的替代身份驗證系統。
5、LDAP
????????LDAP 服務提供通用目錄服務。它可以用來存儲各種信息。所有 LDAP 服務器都有一些系統來控制誰可以讀取和更新目錄中的信息。
????????要訪問 LDAP 服務,LDAP 客戶端首先必須對服務進行身份驗證。也就是說,它必須告訴 LDAP 服務器誰將訪問數據,以便服務器可以決定允許客戶端查看和執行什么操作。如果客戶端向LDAP服務器認證成功,那么當服務器隨后收到客戶端的請求時,會檢查是否允許客戶端執行該請求。這個過程稱為訪問控制。
????????LDAP 標準提出了 LDAP 客戶端可以向 LDAP 服務器進行身份驗證的方法( RFC 2251 和 RFC 2829)。這些將在 LDAP 身份驗證部分和 身份驗證機制部分進行一般性討論。本課還包含有關如何使用 匿名、 簡單和 SASL身份驗證機制的說明。
????????LDAP 服務的另一個安全方面是支持使用安全通道與客戶端進行通信,例如發送和接收包含密碼和密鑰等機密的屬性。LDAP 服務器為此目的使用 SSL。
? ? ? ? 典型應用場景
????????網絡服務:DNS服務
????????統一認證服務:
????????Linux PAM (ssh, login, cvs. . . )
????????Apache訪問控制
????????各種服務登錄(ftpd, php based, perl based, python based. . . )
????????個人信息類,如地址簿
????????服務器信息,如帳號管理、郵件服務等
6、RADIUS
?????????遠程身份驗證撥入用戶服務 ( RADIUS ) 是一種網絡協議,它為連接和使用網絡服務的用戶提供集中的身份驗證、授權和記帳(AAA 或 Triple A)管理。
????????RADIUS 身份驗證在用戶請求通過遠程訪問服務器 (RAS) 訪問網絡資源時開始。用戶輸入用戶名和密碼,由RADIUS服務器加密,然后通過身份驗證過程發送。
????????然后 RADIUS 服務器通過使用身份驗證方案驗證數據來檢查信息的準確性。這是通過將用戶提供的信息與本地存儲的數據庫進行比較或引用外部資源(如 Active Directory 服務器)來完成的。
????????然后,RADIUS 服務器將通過接受、挑戰或拒絕用戶來響應。個人用戶可能會被授予受限訪問權限,而不會影響其他用戶。在質詢的情況下,RADIUS 服務器會向用戶請求其他信息以驗證他們的用戶 ID - 這可能是 PIN 或二級密碼。在拒絕的情況下,用戶將被無條件地拒絕對 RADIUS 協議的所有訪問。
7、CAS
????????中央身份驗證服務 (CAS) 是 Web 的單點登錄協議。其目的是允許用戶訪問多個應用程序,同時僅提供一次憑據(例如用戶 ID 和密碼),同時允許應用程序驗證用戶身份,而無需訪問這些憑據(例如密碼)。CAS 這個名字也指的是實現這個協議的一個軟件包,它最近已經成為 Shibboleth IdP v3 包的一部分。由于 Gluu CE 包含 Shibboleth 以添加對 SAML 協議流的支持,因此它包含了所有與 CAS 相關的功能。CAS 協議的最新版本是 3。
CAS | Apereohttps://www.apereo.org/projects/cas? ? ? ? 如果不是舊的系統中有使用,可能現在應用的感覺就較少了。
8、JWT
????????JWT 是 JSON Web Token 的縮寫,它是一種緊湊的 URL 安全方式,用于表示要在兩方之間傳輸的聲明。JWT 中的聲明被編碼為使用 JSON Web 簽名 (JWS) 進行數字簽名的 JSON 對象。
????????簡而言之,JWT token 是我們在發出網絡請求以安全地傳遞數據并確保它沒有被篡改時傳入 header 或 url 的字符串。
????????JWT 令牌的一種非常常見的用途,也是您可能只應該使用 JWT 的用途,是作為一種API 身份驗證機制。
????????JWT是一種令牌格式,OAuth 2.0 是一種協議(可選使用 JWT 作為令牌格式),實際上很多應用都是OAuth2結合JWT使用。
?????????JWT 令牌包括以下元素
? ? ? ? 1、標頭:算法和令牌類型
{ "alg":"HS256","typ”:"JWT" }????????然后,這個 JSON 被 Base64Url 編碼以形成 JWT 的第一部分。?
'use strict';var header = { "alg": "HS256", "typ": "JWT" }; var enc_header = Buffer.from(JSON.stringify(header)).toString('base64'); // ? "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"? ? ? ? 2、有效數據
{ "sub":"1234567890","name":"John Doe","admin":true }????????然后對有效負載進行 Base64Url 編碼以形成 JSON Web 令牌的第二部分。
'use strict';var payload = { "exp": "2019-02-14", "message": "roses are red" }; var enc_payload = Buffer.from(JSON.stringify(payload)).toString('base64'); // ? eyJleHAiOiIyMDE5LTAyLTE0IiwibmFtZSI6IkpvaG4gRG9lIn0? ? ? ? 3、簽名
????????要創建簽名部分,您必須獲取編碼的標頭、編碼的有效數據、標頭中指定的算法,并對其進行簽名。
'use strict'; const crypto = require('crypto'); var jwt_secret = "secret"; // enc_header and enc_payload are computed earlier var signature = crypto.createHmac('sha256', jwt_secret).update(enc_header +"."+ enc_payload).digest('base64'); // ? 6C46KAaZGp6RjbSqGllfdQF7g8vXCp02NTSrz-PzeoI????????最終的 JWT 令牌如下所示
var token = `${enc_header}.${enc_payload}.${signature}`; // ? eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOiIyMDE5LTAyLTE0IiwibWVzc2FnZSI6InJvc2VzIGFyZSByZWQifQ.0u-mkgLo5479CPjJJ4mXCwn2RW4dFT12fiYiopRWsZw????????JWT 令牌用于身份驗證而不是加密,因此即使不知道密鑰,也有人可以讀取您的標頭和有效負載數據。但是在收到令牌后,您可以使用您的密鑰再次對標頭和有效負載進行簽名,并將其與收到的簽名進行比較,以檢測令牌或消息的篡改。
二、Java安全框架
????????在開發應用程序時,安全性是一個主要問題。在 JAVA 中,有多個安全框架旨在使保護應用程序的過程更快、更容易、更成功。下面是一些通常用于 JAVA 程序、網站和 Web 應用程序的用戶身份驗證和授權的安全框架。
1、Spring Security
????????因為spring security的功能很多,并且支持oauth2,所以非常的重量級,不如Shiro輕量級。但是Spring Security 提供一流的保護,以抵御 CSRF 和會話固定等攻擊。
Spring SecurityLevel up your Java code and explore what Spring can do for you.https://spring.io/projects/spring-security????????Spring Security 模塊與所有其他 Spring 功能無縫集成。Spring Security 提供了多種身份驗證技術,包括 HTTP BASIC、HTTP Digest、HTTP x-509、LDAP、用戶名/密碼、OpenID、預先建立的請求標頭、JAAS、Kerberos 等等。
????????它還提供了多種授權機制,包括授權Web請求、授權方法調用、授權訪問域對象實例等。
2、Apache Shiro
????????Apache Shiro 于 2004 年作為 JSecurity 誕生,并于 2008 年被 Apache 基金會接受。迄今為止,它已經發布了許多版本。
Apache Shiro | Simple. Java. Security.https://shiro.apache.org/????????Apache Shiro 是一個開源安全框架,提供身份驗證、授權、密碼學和會話管理。Shiro 框架具有直觀、易用等特性,同時也能提供健壯的安全性,雖然它的功能不如 Spring Security 那么強大,但是在常規的企業級應用中,也非常常用。
????????Shiro 有四個基石——身份驗證、授權、會話管理和加密。
????????身份驗證:有時稱為“登錄”,這是證明用戶身份的行為。
????????授權:訪問控制的過程,即決定誰訪問什么。
????????會話管理:管理用戶特定的會話,即使在非 Web 或 EJB 應用程序中也是如此。
????????密碼學:通過使用加密算法保持數據安全且易于使用。
????????此外,Shiro 還提供了額外的功能來解決不同環境下面臨的安全問題。
????????Web 支持:Shiro 的 Web 支持 API 可以輕松幫助保護 Web 應用程序。
????????緩存:緩存是 Apache Shiro 中的第一層公民,以確保安全操作快速高效。
????????并發:Apache Shiro 使用其并發特性來支持多線程應用程序。
????????測試:存在測試支持以幫助您編寫單元測試和集成測試。
????????“運行身份”:允許用戶假設另一個用戶身份的功能(如果允許)。它有時在管理腳本時很有用。
????????“記住我”:在會話中記住用戶的身份,這樣用戶在強制登錄時只需要登錄。
3、JAAS
????????Java Authentication and Authorization Services,JAAS是Java安全框架的一部分,從JDK版本 1.4 開始直接集成到 JAVA 開發工具包中。
https://docs.oracle.com/javase/8/docs/technotes/guides/security/jaas/JAASRefGuide.htmlhttps://docs.oracle.com/javase/8/docs/technotes/guides/security/jaas/JAASRefGuide.html????????JAAS 框架主要關注應用程序中用戶的身份驗證和授權。JAAS 是一個可插入的框架,允許應用程序保持獨立于身份驗證技術。實施 JAAS 安全框架時不需要修改應用程序。可以使用多種形式的身份驗證,包括用戶名/密碼、語音、指紋、生物識別等。
????????使用 JAAS 的授權與 JAVA SE 訪問控制模塊一起工作。如果用戶認證成功,JAAS 框架會根據相關主體檢查用戶憑證。
總結
以上是生活随笔為你收集整理的身份验证协议和java安全框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ACM ICPC 2008–2009 N
- 下一篇: 试用豆瓣电台2天