Arch - 架构安全性_认证(Authentication)的标准和实现

news2024/9/22 13:35:09

文章目录

  • OverView
  • 认证的标准
    • 认证的基础
    • 认证的范围
    • 认证的标准与实践
    • HTTP认证框架
    • Web认证(表单认证)
    • WebAuthn标准
      • 认证流程示例:WebAuthn
    • 小结
  • 认证的实现
    • JAAS
    • Spring Security 和 Shiro
    • 小结

在这里插入图片描述

OverView

即使只限定在“软件架构设计”这个语境下,系统安全仍然是一个很大的话题。

接下来我们将对系统安全架构的各个方面进行详细分析,包括认证、授权、凭证、保密、传输安全和验证,结合案例实践,展示如何应用这些安全原则和技术,讨论具体解决方案和行业标准 ,并提供与业界标准相一致的解决方案。

计划:

  1. 认证(Authentication)

    • 介绍认证的基本概念及其在软件架构中的作用。
    • 讨论常见的认证方法(如用户名/密码、双因素认证、生物识别)及其实现方式。
    • 探讨行业标准和最佳实践(如 OAuth、OpenID Connect)。
  2. 授权(Authorization)

    • 定义授权的概念及其重要性。
    • 讲解不同的授权模型(如基于角色的访问控制RBAC、基于属性的访问控制ABAC)。
    • 介绍如何在架构中实现这些模型以及如何处理权限管理。
  3. 凭证(Credential)

    • 阐明凭证的作用及其管理方式。
    • 讨论如何确保证书和凭证的真实性、完整性和不可抵赖性。
    • 介绍现有的凭证管理方案和技术(如 PKI、公钥基础设施)。
  4. 保密(Confidentiality)

    • 解释数据保密的基本概念及其在系统中的应用。
    • 讨论数据加密的技术和策略(如对称加密、非对称加密)。
    • 介绍如何确保保密性,包括数据存储和处理中的加密措施。
  5. 传输(Transport Security)

    • 定义传输安全及其对系统安全的影响。
    • 讲解如何实现传输层安全(如 TLS/SSL)的具体方法。
    • 讨论如何保护网络通信免受中间人攻击和数据篡改。
  6. 验证(Verification)

    • 介绍数据验证的必要性及其对系统稳定性的影响。
    • 讨论常见的验证技术(如输入验证、数据完整性检查)。
    • 讲解如何在系统中实现数据验证机制以保证数据一致性和正确性。

认证的标准

认证(Authentication)是系统安全中的一个核心概念,用于确定操作用户的真实身份。认证不仅涉及到用户登录,还包括系统如何管理和保护用户的身份信息。

认证的基础

在系统中,认证、授权和凭证是最基础的安全设计。

  • 认证回答“你是谁?”的问题,
  • 授权回答“你能干什么?”的问题,
  • 凭证则回答“你如何证明?”的问题。

这三者通常紧密结合在一起,用以保证系统的安全性。


认证的范围

虽然认证通常首先让人联想到用户登录,但实际上,认证对象不仅可以是人,还可以是外部的代码或服务。在早期的Java系统中,代码级安全认证甚至比用户级安全认证更为重要。

这一阶段的安全观念催生了现在仍然存在于 Java 技术体系中的“安全管理器”(java.lang.SecurityManager)、“代码权限许可”(java.lang.RuntimePermission)等概念

现代系统中,代码认证通常通过证书签名实现,而最终用户的认证则涉及到更加复杂的机制。


认证的标准与实践

在网络和Web应用的背景下,认证通常分为以下三种层次:

  1. 通信信道上的认证:在建立通信连接之前,验证通信双方的身份,例如基于SSL/TLS的认证。
  2. 通信协议上的认证:在请求资源之前,验证请求者的身份,例如基于HTTP(S)协议的认证。
  3. 通信内容上的认证:在使用服务之前,验证使用者的身份,例如基于Web内容的认证。

HTTP认证框架

HTTP认证框架通过定义认证方案(Authentication Schemes)来生成身份凭证。服务器在未授权的用户尝试访问资源时,会返回一个401状态码,并附带指示认证方案的WWW-Authenticate头。客户端随后使用Authorization头发送凭证信息。

在这里插入图片描述

常见的认证方案包括:

  • Basic认证:通过Base64编码的用户名和密码进行认证,简单但不安全。

    Basic 认证产生用户身份凭证的方法是让用户输入用户名和密码,经过 Base64 编码“加密”后作为身份凭证。
    譬如请求资源GET /admin后,浏览器会收到来自服务端的如下响应:

    HTTP/1.1 401 Unauthorized
    Date: Mon, 24 Feb 2020 16:50:53 GMT
    WWW-Authenticate: Basic realm="example from icyfenix.cn"
    

    此时,浏览器必须询问最终用户,即弹出 HTTP Basic 认证对话框,要求提供用户名和密码。.

    在这里插入图片描述

    用户在对话框中输入密码信息, 浏览器会将字符串icyfenix:123456编码,然后发送给服务端,HTTP 请求如下所示:

    GET /admin HTTP/1.1
    Authorization: Basic aWN5ZmVuaXg6MTIzNDU2
    

    服务端接收到请求,解码后检查用户名和密码是否合法,如果合法就返回/admin的资源,否则就返回 403 Forbidden 错误,禁止下一步操作。注意 Base64 只是一种编码方式,并非任何形式的加密,所以 Basic 认证的风险是显而易见的。


除 Basic 认证外,IETF 还定义了很多种可用于实际生产环境的认证方案,列举如下

  • Digest认证: RFC 7616 改进了Basic认证,使用哈希算法加密凭证,但仍然存在安全风险。 HTTP 摘要认证,可视为 Basic 认证的改良版本,针对 Base64 明文发送的风险,Digest 认证把用户名和密码加盐(一个被称为 Nonce 的变化值作为盐值)后再通过 MD5/SHA 等哈希算法取摘要发送出去。但是这种认证方式依然是不安全的,无论客户端使用何种加密算法加密,无论是否采用了 Nonce 这样的动态盐值去抵御重放和冒认,遇到中间人攻击时依然存在显著的安全风险。

  • Bearer认证: RFC 6750 基于OAuth2协议,涉及认证与授权。

  • HOBA: RFC 7486 HOBA(HTTP Origin-Bound Authentication)是一种基于自签名证书的认证方案。基于数字证书的信任关系主要有两类模型:一类是采用 CA(Certification Authority)层次结构的模型,由 CA 中心签发证书;另一种是以 IETF 的 Token Binding 协议为基础的 OBC(Origin Bound Certificate)自签名证书模型

Web认证(表单认证)

相比于HTTP认证框架,Web认证更加灵活和常用,尤其是在Web应用中。表单认证允许开发者设计不同的登录界面,并提供各种认证方式。尽管表单认证的实现方式多样,但在安全性上,仍需遵循标准的安全实践。


WebAuthn标准

WebAuthn是由W3C批准的Web内容认证标准,通过生物识别或实体密钥替代传统的密码登录。它采用公钥/私钥对的方式进行认证,私钥存储在用户设备上,极大提升了安全性。
在这里插入图片描述

认证流程示例:WebAuthn

注册流程:

在这里插入图片描述

  1. 用户访问注册页面并提交信息。
  2. 服务器生成随机字符串(Challenge)和用户ID(UserID),返回给客户端。
  3. 客户端通过WebAuthn API与验证器(如指纹识别设备)通信,生成密钥对并返回签名结果和公钥。
  4. 服务器核验信息并存储公钥。

登录流程:

  1. 用户访问登录页面并输入用户名。
  2. 服务器返回Challenge和UserID。
  3. 客户端与验证器通信,使用私钥签名Challenge。
  4. 服务器使用公钥验证签名,确认用户身份。

WebAuthn 采用非对称加密的公钥、私钥替代传统的密码,这是非常理想的认证方案,私钥是保密的,只有验证器需要知道它,连用户本人都不需要知道,也就没有人为泄漏的可能;公钥是公开的,可以被任何人看到或存储。公钥可用于验证私钥生成的签名,但不能用来签名,除了得知私钥外,没有其他途径能够生成可被公钥验证为有效的签名,这样服务器就可以通过公钥是否能够解密来判断最终用户的身份是否合法。

WebAuthn 还一揽子地解决了传统密码在网络传输上的风险, 因为无论密码是否客户端进行加密、如何加密,对防御中间人攻击来说都是没有意义的。更值得夸赞的是 WebAuthn 为登录过程带来极大的便捷性,不仅注册和验证的用户体验十分优秀,而且彻底避免了用户在一个网站上泄漏密码,所有使用相同密码的网站都受到攻击的问题,这个优点使得用户无须再为每个网站想不同的密码

小结

认证在系统安全中扮演着关键角色,从简单的HTTP认证到复杂的WebAuthn标准,认证机制的选择和实现都应考虑安全性和实际需求。在设计和实现认证系统时,遵循已有的标准和最佳实践是确保系统安全的有效途径。


认证的实现

JAAS

Java 技术体系内的认证实现经历了多个阶段,从早期的 JAAS 到现代的 Spring Security 和 Shiro。

1. JAAS(Java Authentication and Authorization Service)
JAAS 是 Java 1.3 引入的一种安全框架,旨在提供统一的认证和授权服务。它的设计目标是为代码级安全和用户级安全提供支持。JAAS 引入了许多关键概念,这些概念在现代 Java 安全框架中依然活跃:

  • LoginModule:负责实现具体的认证逻辑。
  • LoginContext:用于管理认证过程,协调多个 LoginModule 的执行。
  • Subject:代表了经过认证的实体,如用户。
  • Principal:代表特定实体的标识信息,如用户名。
  • Credentials:存储敏感信息,如密码或密钥。

虽然 JAAS 引入了这些概念,但由于其复杂性和较高的学习曲线,它并未得到广泛应用,尤其是在 Java 社区向轻量级开发框架的转变过程中。

Spring Security 和 Shiro

2. 现代 Java 安全框架中的认证
在现代 Java 开发中,Apache Shiro 和 Spring Security 是最常用的认证框架。它们在设计上更注重简化开发者的工作,同时提供强大的功能。

  • Apache Shiro:相对简洁易用,适合中小型应用。它通过简单的配置即可实现用户认证、授权和会话管理。

  • Spring Security:功能强大,特别适合与 Spring 生态系统集成。Spring Security 提供了丰富的认证选项,如基于表单的认证、OAuth2、JWT 等,同时还支持复杂的权限管理和自定义扩展。

两者在功能上非常相似,主要提供以下功能:

  • 认证功能:验证用户身份,支持多种认证方式。
  • 安全上下文:管理认证后的用户信息和权限。
  • 授权功能:控制用户对资源的访问权限。
  • 密码存储与验证:提供安全的密码管理机制。

小结

JAAS 开创了许多重要的安全概念,这些概念在今天仍然活跃于现代 Java 安全框架中。然而,由于其复杂性和与轻量级框架的竞争,JAAS 并未成为主流。取而代之的是更易用且功能强大的 Apache Shiro 和 Spring Security,它们在现代 Java 应用中扮演着至关重要的角色。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2115365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MonoHuman: Animatable Human Neural Field from Monocular Video 精读

一、共享双向变形模块 1. 模块的核心思想 共享双向变形模块的核心目标是解决从单目视频中生成不同姿态下的3D人体形状问题。因为视频中的人物可能处于各种动态姿态下,模型需要能够将这些不同姿态的几何形状进行变形处理,以适应标准的姿态表示并生成新的…

# VMware 共享文件

VMware tools快速安装 VMware 提供了 open-vm-tools,这是 VMware 官方推荐的开源工具包,通常不需要手动安装 VMware Tools,因为大多数 Linux 发行版(包括 Ubuntu、CentOS 等)都包含了 open-vm-tools,并且已…

FreeRTOS内部机制学习02(消息队列深度学习)

文章目录 队列的核心以及好处队列的核心队列的好处 深入源码了解队列机制深入队列读取操作深入队列写入操作读写队列出超时时间 信号量深入信号量获取以及释放操作 互斥量互斥量和信号量的不同深入源码看优先级继承是怎么操作到的 队列的核心以及好处 队列的核心 队列的核心就…

如何打造高效办公楼物业管理系统?Java SpringBoot+Vue架构详解,实现智能化管理,提升工作效率

🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…

GraphPad Prism 10 for Mac/Win:高效统计分析与精美绘图的科学利器

GraphPad Prism 10 是一款专为科研工作者设计的强大统计分析与绘图软件,无论是Mac还是Windows用户,都能享受到其带来的便捷与高效。该软件广泛应用于生物医学研究、实验设计和数据分析领域,以其直观的操作界面、丰富的统计方法和多样化的图表…

Redis中使用布隆过滤器解决缓存穿透问题

一、缓存穿透(失效)问题 缓存穿透是指查询一个一定不存在的数据,由于缓存中没有命中,会去数据库中查询,而数据库中也没有该数据,并且每次查询都不会命中缓存,从而每次请求都直接打到了数据库上,这会给数据…

认知杂谈53

今天分享 有人说的一段争议性的话 I I 1.自助者天助 首先呢,咱得好好琢磨琢磨“自助者天助”这句话。这话说起来好像有点高深莫测的感觉,其实啊,道理特别简单。 就是说要是你自己都不乐意努力,那老天爷也不会平白无故地来帮你…

[环境配置]ubuntu20.04安装后wifi有图标但是搜不到热点解决方法

最近刚入手一台主机,暗影精灵8plus电竞主机,安装ubuntu后wifi怎么都搜不到热点,前后重装系统6次才算解决问题。这个心酸历程只有搞技术人才明白。下面介绍我解决过程。 首先主机到手后是个windows10系统,我用无线网连接了一下&am…

【每日刷题】Day113

【每日刷题】Day113 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 91. 解码方法 - 力扣(LeetCode) 2. LCR 098. 不同路径 - 力扣(…

服务器流量监控工具vnStat的简单使用以及关于Linux的软中断信号(signal)的一点内容

一、服务器流量监控工具vnStat的简单使用 vnStat是为Linux和BSD设计的基于控制台的网络流量监控工具,通过它可以非常方便在命令行查看流量统计情况。它可以保留某个或多个所选择的网络接口的网络流量日志。为了生成日志,vnStat使用内核提供的信息。换句话…

2024年必看的4款录屏新星,谁才是你的菜?

嘿,小伙伴们,你们的职场好帮手来啦。今天我们要说说办公室里经常被忽略但实际上超有用的东西——录屏软件。现在大家都用数字化工具办公了,不管是做教学视频、记录会议,还是直播玩游戏,录屏软件都是必不可少的。可是市…

FRP内网穿透使用常见问题

本文解答一些关于FRP内网穿透的常见问题 FRP简介 FRP是一款开源的高性能反向代理应用,支持多种协议的内网穿透。它允许用户在外网环境中访问位于内网中的服务器和服务,如Web服务器、MySQL数据库、以及其他基于TCP/UDP的应用程序。FRP以其灵活的配置选项…

C++实现俄罗斯方块(Windows控制台版)

C实现俄罗斯方块(Windows控制台版) 在油管上看到一个使用C控制台编写的俄罗斯方块小游戏,源代码200多行,B站上也有相关的讲解视频,非常不错,值得学习。 B站讲解视频地址为:【百万好评】国外技术…

Unet改进27:添加DGCST|Vision Transformer与DGSM模块集成在一起的创新结构

本文内容:在不同位置添加DGCST 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 随着移动计算技术的快速发展,在移动设备上部署高效的目标检测算法成为计算机视觉的一个关键研究领域。本研究的重点是优化YOLOv7算法,以提高其在移动平台上的运行效率和速度…

【Linux】传输层协议——UDP

零、传输层的作用是负责数据能够从发送端传输到接收端 一、再来认识一下端口号 端口号(Port)标识了一个主机进行通信的不同的应用程序。在TCP/IP协议中,用“源IP”,“源端口号”,“目的IP”,“目的端口号”…

Request Response

1 前言 1.1 内容概要 理解Request、Response和HTTP报文之间的关系掌握通过Request能够获得的信息 请求URL、URI、请求协议请求头、客户机和主机请求参数 掌握通过Response能够完成的设置 响应中文乱码问题响应(Json)字符串、图片(文件&a…

【网络】UDP协议的简单使用

目录 服务器 客户端 测试 UDP是基于socket进行网络通信的,那我们这篇博客就来介绍一下基于UDP通信的基本流程,先让服务端和客户端进行简单的跨网络通信。 服务器 首先我们需要创建UDP套接字,用到的接口是 man socket 如果要使用UDP通信&am…

【Python知识宝库】面向对象编程:Python类的深度剖析

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、类的定义二、类的属性1. 类属性2. 实例属性 三、类的方法1. 实例方法2. 类方法 四、继承五、总结 前言 面向…

【C++ Primer Plus习题】12.3

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream> #include "stock20.h&quo…

嵌入式OpenHarmony源码基本原理详解

大家好,今天主要给大家分享一下,如何分析与使用OpenHarmony源码,欢迎交流学习。 第一:OpenHarmony源码简介 在3.0版本中,Lite系统(即轻量系统和小型系统)、标准系统各有一套独立的构建入口和上层的构建流程,但在3.2版本中,两者开始互相借鉴,取长补短并实现了融合统一;…