身份验证协议和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安全框架相关推荐
- 基于部标jt808(天琴、谷米),809协议和Java Netty框架构建北斗GPS定位系统
演示平台:http://gps.lingx.com 账号:admin,密码:123456 1. 开发环境 操作系统:Windows 系列/Linux 系列/MacOS 32 位或 64 位都可以 ...
- Modbus通信协议和Java实现
Modbus通信协议 Modbus通信协议 介绍 RTU 存储区 通信 协议 栗子 说明书的地址 实现 Modbus通信协议 介绍 Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电 ...
- Aria2 RPC接口协议和Java的本地调用实现
如果你还没有启动aria2 : 安装和配置 目录 Aria2 RPC接口协议 Java实现 依赖 核心类 调用 Aria2 RPC接口协议 官方文档 方法列表 下载参数 本文中我们使用默认的本地调用, ...
- Bacnet IP协议和Java实现
Bacnet IP 楼宇自控BACnet/IP协议网关用于楼宇自控系统.楼宇自动化.楼宇信息系统,暖通HAVC行业实现联网,需要需要满足BACNet协议.PLC协议.Modbus协议.OPC UA协议 ...
- 基于java spring框架开发部标1078视频监控平台精华文章索引
部标1078视频监控平台,是一个庞杂的工程,涵盖了多层协议,部标jt808,jt809,jt1078,苏标Adas协议等,多个平台功能标准,部标796标准,部标1077标准和苏标主动安全标准,视频方面 ...
- 如何使用Java和XML Config在Spring Security中启用HTTP基本身份验证
在上一篇文章中,我向您展示了如何在Java应用程序中启用Spring安全性 ,今天我们将讨论如何使用Spring Security 在Java Web应用程序中启用Basic HTTP身份验证 . 如 ...
- java验证身份证合法性_Java安全性,第2部分:身份验证和授权
关于本教程 本教程是关于什么的? 也许没有比应用程序安全更重要的软件工程主题. 攻击是昂贵的,无论是来自内部还是外部,而且某些攻击可能会使软件公司承担赔偿责任. 随着计算机(尤其是Internet)技 ...
- 使用Shell和Java驱动程序的MongoDB身份验证配置示例
Authentication enables user to verify identity before connecting to the database. At first, a user w ...
- Java使用google身份验证器实现动态口令验证
google身份认证器服务端key的生成和它生成的随机密码的验证: 客户端和服务器事先协商好一个密钥K,用于一次性密码的生成过程,此密钥不被任何第三方所知道.此外,客户端和服务器各有一个计数器C,并且 ...
最新文章
- 成为表情包大帝,仅需几十行python代码,简单易学
- 专家提醒:计算机专业毕业生求职三要点!
- 2010后的经济增长点再研究
- MIT发布“全球最快AutoML”,刷新DARPA比赛成绩
- Python-OpenCV 处理图像(五):图像中边界和轮廓检测
- matlab 若当标准型,若当标准型求解.pdf
- 【小题目】判断一个数字是否是3的倍数
- java面试题42从以下哪一个选项中可以获得Servlet的初始化参数?
- php输出mysql查询结果_PHP简单获取数据库查询结果并返回JSON
- 截取台风后的图片_Python数据分析案例 | 台风最喜欢在我国哪个省市登陆
- 【转】QTableView 小结
- Cisco自反控制列表的应用
- 8.Java web—JSP基本语法
- 语音识别技术发展史与行业最佳实践全解析
- HoloLens开发手记 - Unity之语音输入
- fabric1.0 java sdk_运行 fabric-sdk-java 官方示例
- ☆【平衡二叉树】魔兽争霸
- 【dgl框架】dgl.metapath_reachable_graph函数解析
- java毕业设计SEOUL设计师品牌代购商城Mybatis+系统+数据库+调试部署
- 爆火的ChatGPT接入微信教程——实现ChatGPT自动聊天