日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

身份验证协议和java安全框架

發(fā)布時(shí)間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 身份验证协议和java安全框架 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、身份驗(yàn)證協(xié)議

1、OAuth

????????關(guān)于 OAuth實(shí)際上是什么存在很多混淆。有些人認(rèn)為 OAuth 是一種登錄流程(例如,當(dāng)您使用 Google Login 登錄應(yīng)用程序時(shí)),有些人認(rèn)為 OAuth 是一種“安全性的東西”。

????????首先,OAuth不是API 或服務(wù):它是授權(quán)的開放標(biāo)準(zhǔn),任何人都可以實(shí)現(xiàn)它。

????????更具體地說(shuō),OAuth 是應(yīng)用程序可用來(lái)為客戶端應(yīng)用程序提供“安全委托訪問(wèn)”的標(biāo)準(zhǔn)。OAuth通過(guò)HTTPS工作,并使用訪問(wèn)令牌而不是憑據(jù)對(duì)設(shè)備、API、服務(wù)器和應(yīng)用程序進(jìn)行授權(quán)。????????

????????如今,OAuth 2.0 是使用最廣泛的 OAuth 形式。所以,當(dāng)提起“OAuth”時(shí),指的是OAuth2.0。

OAuth Community Sitehttps://oauth.net/????????OAuth 定義了四個(gè)角色:

????????資源所有者:能夠授予對(duì)受保護(hù)資源的訪問(wèn)權(quán)限的實(shí)體。當(dāng)資源所有者是一個(gè)人時(shí),它被稱為最終用戶。

????????資源服務(wù)器:托管受保護(hù)資源的服務(wù)器,能夠接受并使用訪問(wèn)令牌響應(yīng)受保護(hù)的資源請(qǐng)求。

????????客戶:代表受保護(hù)資源請(qǐng)求的應(yīng)用程序資源所有者及其授權(quán)。“客戶”一詞確實(shí)不暗示任何特定的實(shí)現(xiàn)特征(例如,應(yīng)用程序是否在服務(wù)器、桌面或其他設(shè)備上執(zhí)行設(shè)備)。

????????授權(quán)服務(wù)器:服務(wù)器成功后向客戶端頒發(fā)訪問(wèn)令牌驗(yàn)證資源所有者并獲得授權(quán)。

????????OAuth 2.0是一個(gè)框架,用于控制對(duì)受保護(hù)資源(例如應(yīng)用程序或一組文件)的授權(quán)。OAuth 有點(diǎn)像房子的規(guī)則,它規(guī)定了一個(gè)人在里面可以做什么和不能做什么。?

? ? ? ? 比如.net core的auth2框架ids4。全稱:IdentityServer4。或者Java的spring security也支持auth2。

2、SAML

????????SAML全稱是安全斷言標(biāo)記語(yǔ)言(Security Assertion Markup Language)是一個(gè)基于XML的開源標(biāo)準(zhǔn)數(shù)據(jù)格式。用于在不同的安全域之間交換認(rèn)證和數(shù)據(jù)授權(quán)。在SAML標(biāo)準(zhǔn)定義了身份提供者(IDP)和服務(wù)提供者(SP),這兩者構(gòu)成了前面所說(shuō)的不同的安全域。 SAML是OASIS組織安全服務(wù)技術(shù)委員會(huì)(Security Services Technical Committee)的產(chǎn)品。

????????SAML解決的最重要的需求是Web端應(yīng)用的單點(diǎn)登錄(SSO)。

????????SAML 協(xié)議主要有三個(gè)角色:

????????SP(Service Provider):向用戶提供服務(wù)的web 端應(yīng)用。

????????IDP(Identity Provide):向SP提供用戶身份信息

????????用戶:通過(guò)登錄IDP獲取身份斷言,并向SP返回身份斷言來(lái)使用SP提供的服務(wù)。

????????SAML 有點(diǎn)像房門鑰匙。它允許您訪問(wèn)該設(shè)施。

3、OpenID Connect?

????????OpenID Connect 基于 OAuth 2.0 協(xié)議構(gòu)建,并使用稱為 ID 令牌的附加 JSON Web 令牌 (JWT) 來(lái)標(biāo)準(zhǔn)化 OAuth 2.0 留給選擇的區(qū)域,例如范圍和端點(diǎn)發(fā)現(xiàn)。它特別專注于用戶身份驗(yàn)證,并廣泛用于在消費(fèi)者網(wǎng)站和移動(dòng)應(yīng)用程序上啟用用戶登錄。

????????它允許客戶端根據(jù)授權(quán)服務(wù)器執(zhí)行的身份驗(yàn)證驗(yàn)證最終用戶的身份,并以可互操作和類似 REST 的方式獲取有關(guān)最終??用戶的基本配置文件信息。

????????OpenID Connect 允許所有類型的客戶端(包括基于 Web、移動(dòng)和 JavaScript 的客戶端)請(qǐng)求和接收有關(guān)經(jīng)過(guò)身份驗(yàn)證的會(huì)話和最終用戶的信息。該規(guī)范套件是可擴(kuò)展的,允許參與者在對(duì)他們有意義的情況下使用可選功能,例如身份數(shù)據(jù)加密、OpenID 提供者發(fā)現(xiàn)和會(huì)話管理。

OpenID Connect | OpenIDhttps://openid.net/connect/????????oAuth2.0協(xié)議是用來(lái)獲取對(duì)受保護(hù)的資源比如某些web api調(diào)用所需的access token的。OpenID Connect則利用了oAuth2.0的這個(gè)流程來(lái)允許RP(三方應(yīng)用)獲取用戶的身份信息。這些信息是以JWT形式進(jìn)行交互的id token。同時(shí),OpenID Connect還允許RP用獲取id token時(shí)由OP一并返回的access token來(lái)進(jìn)一步獲取用戶的個(gè)人信息,比如email、手機(jī)號(hào)碼等。

? ? ? ? 非常常見的就是我們經(jīng)常使用的是第三方登陸等。

4、kerberos

????????Kerberos (KRB5) 是一種成熟、靈活、開放且非常安全的網(wǎng)絡(luò)身份驗(yàn)證協(xié)議。Kerberos 包括身份驗(yàn)證、相互身份驗(yàn)證、消息完整性以及機(jī)密性和委托功能。它旨在通過(guò)使用密鑰加密技術(shù)為客戶端/服務(wù)器應(yīng)用程序提供強(qiáng)身份驗(yàn)證。麻省理工學(xué)院可免費(fèi)實(shí)施該協(xié)議。Kerberos 也可用于許多商業(yè)產(chǎn)品。

? ? ? ? MIT的Kerberos網(wǎng)址。

Kerberos: The Network Authentication Protocolhttps://web.mit.edu/kerberos/????????Kerberos 由 MIT 創(chuàng)建,用于解決網(wǎng)絡(luò)安全問(wèn)題。Kerberos 協(xié)議使用強(qiáng)加密,因此客戶端可以通過(guò)不安全的網(wǎng)絡(luò)連接向服務(wù)器證明其身份(反之亦然)。在客戶端和服務(wù)器使用 Kerberos 證明他們的身份之后,他們還可以加密他們的所有通信,以確保他們開展業(yè)務(wù)時(shí)的隱私和數(shù)據(jù)完整性。

? ? ? ? Kerberos提供了一個(gè)集中的認(rèn)證服務(wù)器。在 Kerberos 中,身份驗(yàn)證服務(wù)器和數(shù)據(jù)庫(kù)用于客戶端身份驗(yàn)證。Kerberos 作為第三方可信服務(wù)器運(yùn)行,稱為密鑰分發(fā)中心 (KDC)。網(wǎng)絡(luò)上的每個(gè)用戶和服務(wù)都是一個(gè)主體。?

????????Kerberos 的主要組件有:

????????身份驗(yàn)證服務(wù)器 (AS):身份驗(yàn)證服務(wù)器執(zhí)行票證授予服務(wù)的初始身份驗(yàn)證和票證。?
?
????????數(shù)據(jù)庫(kù):Authentication Server 驗(yàn)證用戶在數(shù)據(jù)庫(kù)中的訪問(wèn)權(quán)限。?
?
????????Ticket Granting Server (TGS):Ticket Granting Server 為服務(wù)器簽發(fā)票據(jù)?

????????基本步驟

? ? ? ? 1、客戶端從密鑰分發(fā)中心 (KDC) 請(qǐng)求身份驗(yàn)證票 (TGT)。

? ? ? ? 2、KDC 驗(yàn)證憑據(jù)并發(fā)回加密的 TGT 和會(huì)話密鑰。

? ? ? ? 3、客戶端請(qǐng)求訪問(wèn)服務(wù)器上的應(yīng)用程序。應(yīng)用程序服務(wù)器的票證請(qǐng)求被發(fā)送到由客戶端的 TGT 和身份驗(yàn)證器組成的 KDC。

? ? ? ? 4、KDC 向用戶返回票證和會(huì)話密鑰。

? ? ? ? 5、票證被發(fā)送到應(yīng)用程序服務(wù)器。一旦收到票證和身份驗(yàn)證器,服務(wù)器就可以對(duì)客戶端進(jìn)行身份驗(yàn)證。

? ? ? ? 6、服務(wù)器使用另一個(gè)身份驗(yàn)證器回復(fù)客戶端。接收到這個(gè)驗(yàn)證器后,客戶端可以驗(yàn)證服務(wù)器。

? ? ? ? 要是使用Kerberos,必須單獨(dú)修改每個(gè)應(yīng)用。

????????盡管 Kerberos 在數(shù)字世界中隨處可見,但它通常用于依賴強(qiáng)大的身份驗(yàn)證和審計(jì)功能的安全系統(tǒng)中。Kerberos 用于 Posix、Active Directory、NFS 和 Samba 身份驗(yàn)證。它也是 SSH、POP 和 SMTP 的替代身份驗(yàn)證系統(tǒng)。

5、LDAP

????????LDAP 服務(wù)提供通用目錄服務(wù)。它可以用來(lái)存儲(chǔ)各種信息。所有 LDAP 服務(wù)器都有一些系統(tǒng)來(lái)控制誰(shuí)可以讀取和更新目錄中的信息。

????????要訪問(wèn) LDAP 服務(wù),LDAP 客戶端首先必須對(duì)服務(wù)進(jìn)行身份驗(yàn)證。也就是說(shuō),它必須告訴 LDAP 服務(wù)器誰(shuí)將訪問(wèn)數(shù)據(jù),以便服務(wù)器可以決定允許客戶端查看和執(zhí)行什么操作。如果客戶端向LDAP服務(wù)器認(rèn)證成功,那么當(dāng)服務(wù)器隨后收到客戶端的請(qǐng)求時(shí),會(huì)檢查是否允許客戶端執(zhí)行該請(qǐng)求。這個(gè)過(guò)程稱為訪問(wèn)控制。

????????LDAP 標(biāo)準(zhǔn)提出了 LDAP 客戶端可以向 LDAP 服務(wù)器進(jìn)行身份驗(yàn)證的方法( RFC 2251 和 RFC 2829)。這些將在 LDAP 身份驗(yàn)證部分和 身份驗(yàn)證機(jī)制部分進(jìn)行一般性討論。本課還包含有關(guān)如何使用 匿名、 簡(jiǎn)單和 SASL身份驗(yàn)證機(jī)制的說(shuō)明。

????????LDAP 服務(wù)的另一個(gè)安全方面是支持使用安全通道與客戶端進(jìn)行通信,例如發(fā)送和接收包含密碼和密鑰等機(jī)密的屬性。LDAP 服務(wù)器為此目的使用 SSL。

? ? ? ? 典型應(yīng)用場(chǎng)景

????????網(wǎng)絡(luò)服務(wù):DNS服務(wù)
????????統(tǒng)一認(rèn)證服務(wù):
????????Linux PAM (ssh, login, cvs. . . )
????????Apache訪問(wèn)控制
????????各種服務(wù)登錄(ftpd, php based, perl based, python based. . . )
????????個(gè)人信息類,如地址簿
????????服務(wù)器信息,如帳號(hào)管理、郵件服務(wù)等

6、RADIUS

?????????遠(yuǎn)程身份驗(yàn)證撥入用戶服務(wù) ( RADIUS ) 是一種網(wǎng)絡(luò)協(xié)議,它為連接和使用網(wǎng)絡(luò)服務(wù)的用戶提供集中的身份驗(yàn)證、授權(quán)和記帳(AAA 或 Triple A)管理。

????????RADIUS 身份驗(yàn)證在用戶請(qǐng)求通過(guò)遠(yuǎn)程訪問(wèn)服務(wù)器 (RAS) 訪問(wèn)網(wǎng)絡(luò)資源時(shí)開始。用戶輸入用戶名和密碼,由RADIUS服務(wù)器加密,然后通過(guò)身份驗(yàn)證過(guò)程發(fā)送。

????????然后 RADIUS 服務(wù)器通過(guò)使用身份驗(yàn)證方案驗(yàn)證數(shù)據(jù)來(lái)檢查信息的準(zhǔn)確性。這是通過(guò)將用戶提供的信息與本地存儲(chǔ)的數(shù)據(jù)庫(kù)進(jìn)行比較或引用外部資源(如 Active Directory 服務(wù)器)來(lái)完成的。

????????然后,RADIUS 服務(wù)器將通過(guò)接受、挑戰(zhàn)或拒絕用戶來(lái)響應(yīng)。個(gè)人用戶可能會(huì)被授予受限訪問(wèn)權(quán)限,而不會(huì)影響其他用戶。在質(zhì)詢的情況下,RADIUS 服務(wù)器會(huì)向用戶請(qǐng)求其他信息以驗(yàn)證他們的用戶 ID - 這可能是 PIN 或二級(jí)密碼。在拒絕的情況下,用戶將被無(wú)條件地拒絕對(duì) RADIUS 協(xié)議的所有訪問(wèn)。

7、CAS

????????中央身份驗(yàn)證服務(wù) (CAS) 是 Web 的單點(diǎn)登錄協(xié)議。其目的是允許用戶訪問(wèn)多個(gè)應(yīng)用程序,同時(shí)僅提供一次憑據(jù)(例如用戶 ID 和密碼),同時(shí)允許應(yīng)用程序驗(yàn)證用戶身份,而無(wú)需訪問(wèn)這些憑據(jù)(例如密碼)。CAS 這個(gè)名字也指的是實(shí)現(xiàn)這個(gè)協(xié)議的一個(gè)軟件包,它最近已經(jīng)成為 Shibboleth IdP v3 包的一部分。由于 Gluu CE 包含 Shibboleth 以添加對(duì) SAML 協(xié)議流的支持,因此它包含了所有與 CAS 相關(guān)的功能。CAS 協(xié)議的最新版本是 3。

CAS | Apereohttps://www.apereo.org/projects/cas? ? ? ? 如果不是舊的系統(tǒng)中有使用,可能現(xiàn)在應(yīng)用的感覺就較少了。

8、JWT

????????JWT 是 JSON Web Token 的縮寫,它是一種緊湊的 URL 安全方式,用于表示要在兩方之間傳輸?shù)穆暶鳌WT 中的聲明被編碼為使用 JSON Web 簽名 (JWS) 進(jìn)行數(shù)字簽名的 JSON 對(duì)象。

????????簡(jiǎn)而言之,JWT token 是我們?cè)诎l(fā)出網(wǎng)絡(luò)請(qǐng)求以安全地傳遞數(shù)據(jù)并確保它沒有被篡改時(shí)傳入 header 或 url 的字符串。

????????JWT 令牌的一種非常常見的用途,也是您可能只應(yīng)該使用 JWT 的用途,是作為一種API 身份驗(yàn)證機(jī)制。

????????JWT是一種令牌格式,OAuth 2.0 是一種協(xié)議(可選使用 JWT 作為令牌格式),實(shí)際上很多應(yīng)用都是OAuth2結(jié)合JWT使用。

?????????JWT 令牌包括以下元素

? ? ? ? 1、標(biāo)頭:算法和令牌類型

{ "alg":"HS256","typ”:"JWT" }

????????然后,這個(gè) JSON 被 Base64Url 編碼以形成 JWT 的第一部分。?

'use strict';var header = { "alg": "HS256", "typ": "JWT" }; var enc_header = Buffer.from(JSON.stringify(header)).toString('base64'); // ? "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"

? ? ? ? 2、有效數(shù)據(jù)

{ "sub":"1234567890","name":"John Doe","admin":true }

????????然后對(duì)有效負(fù)載進(jìn)行 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、簽名

????????要?jiǎng)?chuàng)建簽名部分,您必須獲取編碼的標(biāo)頭、編碼的有效數(shù)據(jù)、標(biāo)頭中指定的算法,并對(duì)其進(jìn)行簽名。

'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 令牌用于身份驗(yàn)證而不是加密,因此即使不知道密鑰,也有人可以讀取您的標(biāo)頭和有效負(fù)載數(shù)據(jù)。但是在收到令牌后,您可以使用您的密鑰再次對(duì)標(biāo)頭和有效負(fù)載進(jìn)行簽名,并將其與收到的簽名進(jìn)行比較,以檢測(cè)令牌或消息的篡改。

二、Java安全框架

????????在開發(fā)應(yīng)用程序時(shí),安全性是一個(gè)主要問(wèn)題。在 JAVA 中,有多個(gè)安全框架旨在使保護(hù)應(yīng)用程序的過(guò)程更快、更容易、更成功。下面是一些通常用于 JAVA 程序、網(wǎng)站和 Web 應(yīng)用程序的用戶身份驗(yàn)證和授權(quán)的安全框架。

1、Spring Security

????????因?yàn)閟pring security的功能很多,并且支持oauth2,所以非常的重量級(jí),不如Shiro輕量級(jí)。但是Spring Security 提供一流的保護(hù),以抵御 CSRF 和會(huì)話固定等攻擊。

Spring SecurityLevel up your Java code and explore what Spring can do for you.https://spring.io/projects/spring-security????????Spring Security 模塊與所有其他 Spring 功能無(wú)縫集成。Spring Security 提供了多種身份驗(yàn)證技術(shù),包括 HTTP BASIC、HTTP Digest、HTTP x-509、LDAP、用戶名/密碼、OpenID、預(yù)先建立的請(qǐng)求標(biāo)頭、JAAS、Kerberos 等等。

????????它還提供了多種授權(quán)機(jī)制,包括授權(quán)Web請(qǐng)求、授權(quán)方法調(diào)用、授權(quán)訪問(wèn)域?qū)ο髮?shí)例等。

2、Apache Shiro

????????Apache Shiro 于 2004 年作為 JSecurity 誕生,并于 2008 年被 Apache 基金會(huì)接受。迄今為止,它已經(jīng)發(fā)布了許多版本。

Apache Shiro | Simple. Java. Security.https://shiro.apache.org/????????Apache Shiro 是一個(gè)開源安全框架,提供身份驗(yàn)證、授權(quán)、密碼學(xué)和會(huì)話管理。Shiro 框架具有直觀、易用等特性,同時(shí)也能提供健壯的安全性,雖然它的功能不如 Spring Security 那么強(qiáng)大,但是在常規(guī)的企業(yè)級(jí)應(yīng)用中,也非常常用。

????????Shiro 有四個(gè)基石——身份驗(yàn)證、授權(quán)、會(huì)話管理和加密。

????????身份驗(yàn)證:有時(shí)稱為“登錄”,這是證明用戶身份的行為。
????????授權(quán):訪問(wèn)控制的過(guò)程,即決定誰(shuí)訪問(wèn)什么。
????????會(huì)話管理:管理用戶特定的會(huì)話,即使在非 Web 或 EJB 應(yīng)用程序中也是如此。
????????密碼學(xué):通過(guò)使用加密算法保持?jǐn)?shù)據(jù)安全且易于使用。

????????此外,Shiro 還提供了額外的功能來(lái)解決不同環(huán)境下面臨的安全問(wèn)題。

????????Web 支持:Shiro 的 Web 支持 API 可以輕松幫助保護(hù) Web 應(yīng)用程序。
????????緩存:緩存是 Apache Shiro 中的第一層公民,以確保安全操作快速高效。
????????并發(fā):Apache Shiro 使用其并發(fā)特性來(lái)支持多線程應(yīng)用程序。
????????測(cè)試:存在測(cè)試支持以幫助您編寫單元測(cè)試和集成測(cè)試。
????????“運(yùn)行身份”:允許用戶假設(shè)另一個(gè)用戶身份的功能(如果允許)。它有時(shí)在管理腳本時(shí)很有用。
????????“記住我”:在會(huì)話中記住用戶的身份,這樣用戶在強(qiáng)制登錄時(shí)只需要登錄。

3、JAAS

????????Java Authentication and Authorization Services,JAAS是Java安全框架的一部分,從JDK版本 1.4 開始直接集成到 JAVA 開發(fā)工具包中。

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 框架主要關(guān)注應(yīng)用程序中用戶的身份驗(yàn)證和授權(quán)。JAAS 是一個(gè)可插入的框架,允許應(yīng)用程序保持獨(dú)立于身份驗(yàn)證技術(shù)。實(shí)施 JAAS 安全框架時(shí)不需要修改應(yīng)用程序。可以使用多種形式的身份驗(yàn)證,包括用戶名/密碼、語(yǔ)音、指紋、生物識(shí)別等。

????????使用 JAAS 的授權(quán)與 JAVA SE 訪問(wèn)控制模塊一起工作。如果用戶認(rèn)證成功,JAAS 框架會(huì)根據(jù)相關(guān)主體檢查用戶憑證。

總結(jié)

以上是生活随笔為你收集整理的身份验证协议和java安全框架的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。