常见安全概念澄清,Java小白入门(八)

认证

认证 (Identification) 是验证当前用户的身份。

常见的认证技术:

  • 身份证
  • 用户名和密码
  • 用户手机:手机短信、手机二维码扫描、手势密码
  • 用户的电子邮箱
  • 用户的生物学特征:指纹、语音、眼睛虹膜

授权

授权 (Authorization) 指赋予用户系统的访问权限。认证完用户身份后,系统会授予用户部分或者全部权限。系统要是没有权限控制需求的话,一般认证后用户就有全部权限。

实现授权的方式有:

  • cookie
  • session
  • token
  • OAuth

鉴权

鉴权 (Authentication) 是指系统鉴定用户身份和权限。比如系统需要鉴定 session/cookie/token 的合法性和有效性。

认证、授权和鉴权关系

这三个概念的关系也是很清晰,就是一个前后依次发生的关系:认证 => 授权 => 鉴权。比如我们登录某个系统就完成了认证和授权,后续使用功能时就需要系统鉴权。

Session

利用服务端的 Session(会话)和浏览器(客户端)的 Cookie 来实现的前后端通信认证模式。

由于 HTTP 请求时是无状态的,服务端正常情况下无法得知请求发送者的身份。这个时候如果我们要记录状态,就需要在服务端创建会话,将相同客户端的请求都维护在各自的会话记录中,每当请求到达服务端时,先校验请求中的用户标识是否存在于 Session 中,如果有则表示已经认证成功,否则表示认证失败。

Cookie 安全性问题,大小问题等。

Token

负载均衡多服务器的情况,不好确认当前用户是否登录,因为多服务器不共享 Session。这个问题也可以将 Session 存在一个服务器中来解决,但是就不能完全达到负载均衡的效果。 Token 和 Session-Cookie 认证方式中的 Session ID 不同,并非只是一个标识符。Token 一般会包含用户的相关信息,通过验证 Token 不仅可以完成身份校验,还可以获取预设的信息。 客户端可以将 token 存放于 localStroage 等容器中。客户端每次访问都传递 token,服务端解密 token,服务端就不需要存储 Session 占用存储空间,就很好的解决负载均衡多服务器的问题了。Token 是一个令牌,客户端访问服务器时,验证通过后服务端会为其签发一张令牌,之后,客户端就可以携带令牌访问服务器,服务端只需要验证令牌的有效性即可。

一般 Token 的组成:uid(用户唯一的身份标识) + time(当前时间的时间戳) + sign(签名,Token 的前几位以哈希算法压缩成的一定长度的十六进制字符串)。

JSON Web Token(JWT)

上述 Token 中,一般只有 uid 信息,需要更多登录信息和其他数据的话,这时就需要查询数据库。每次都需要查询数据库,就会带来一些性能消耗。所以业界常用的 JWT 方案就出来了。

  • JSON Web Token(简称 JWT)是目前最流行的跨域认证解决方案。
  • 是一种认证授权机制
  • JWT 是为了在网络应用环境间传递声明而执行的一种基于 JSON 的开放标准(RFC 7519)。JWT 的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。

JWT 是 Auth0 提出的通过对 JSON 进行加密签名来实现授权验证的方案, 它的特点是自包含的,用户信息和认证是在一起的,无需像 Cookie-Session 一样需要 Session 服务器,或者像 Token 一样访问数据库获取用户信息。

JWT 本质上就是一组字串,通过(.)切分成三个为 Base64 编码的部分:

  • Header : 描述 JWT 的元数据,定义了生成签名的算法以及 Token 的类型。
  • Payload : 用来存放实际需要传递的数据,JWT 规定了 7 个官方字段,比如 iss、exp 等等,还可以自定义数据。
  • Signature(签名):服务器通过 Payload、Header 和一个密钥 (Secret) 使用 Header 里面指定的签名算法(默认是 HMAC SHA256)生成。

单点登录

SSO英文全称Single SignOn,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务整合的解决方案之一。

当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进行登录;根据用户提供的登录信息,认证系统进行身份校验,如果通过校验,应该返回给用户一个认证的凭据--ticket;用户再访问别的应用的时候就会将这个ticket带上,作为自己认证的凭据,应用系统接受到请求之后会把ticket送到认证系统进行校验,检查ticket的合法性。如果通过校验,用户就可以在不用再次登录的情况下访问其他相关的各个应用系统了。

OAuth2.0

OAuth 是一个开放的非常重要的认证标准/协议,该标准允许用户让第三方应用访问该用户在某一网站上存储的私密资源(如头像、照片、视频等),并且在这个过程中无须将用户名和密码提供给第三方应用。通过令牌(token)可以实现这一功能,每一个令牌授权一个特定的网站在特定的时段内允许可特定的资源。OAuth 让用户可以授权第三方网站灵活访问它们存储在另外一些资源服务器上的特定信息,而非所有内容。对于用户而言,我们在互联网应用中最常见的 OAuth 应用就是各种第三方登录,例如QQ授权登录、微信授权登录、微博授权登录、GitHub 授权登录等。

  1. 授权码模式(Authorization Code Grant):使用最广泛的一种授权方式,当用户点击“同意授权”时会跳转到授权服务器进行授权,授权成功后返回一个授权码给客户端,客户端再通过授权码向授权服务器请求获取 Access Token。
  2. 简化模式(Implicit Grant):适用于客户端是 Web 应用程序,直接在浏览器中获取 Access Token,不需要通过授权码获取 Access Token
  3. 客户端模式(Client Credentials Grant):适用于客户端需要访问自己的资源而不是用户的资源,客户端向授权服务器提交自己的身份信息获取 Access Token。
  4. 密码模式(Password Credentials Grant):适用于客户端与资源服务器之间有高度信任关系,比如客户端和资源服务器都受同一家公司管理,客户端可以直接向授权服务器请求 Access Token,此时需要提供自己的用户名和密码。

首先,SSO是一种思想,或者说是一种解决方案,是抽象的,我们要做的就是按照它的这种思想去实现它

其次,OAuth2是用来允许用户授权第三方应用访问他在另一个服务器上的资源的一种协议,它不是用来做单点登录的,但我们可以利用它来实现单点登录。在本例实现SSO的过程中,受保护的资源就是用户的信息(包括,用户的基本信息,以及用户所具有的权限),而我们想要访问这这一资源就需要用户登录并授权,OAuth2服务端负责令牌的发放等操作,这令牌的生成我们采用JWT,也就是说JWT是用来承载用户的Access_Token的

其他

关于 OIDC

OIDC 是一个 OAuth2 上层的简单身份层协议。它允许客户端验证用户的身份并获取基本的用户配置信息。OIDC 使用 JSON Web Token(JWT)作为信息返回,通过符合 OAuth2 的流程来获取。

关于 LDAP

LDAP (Light Directory Access Portocol),中文名轻量目录访问协议,是一个开放、广泛被使用的工业标准。比如我们的 Jira、Confluence、Yapi。 但是 LDAP 并不能做到单点登录 SSO,只是可以用同样的用户名和密码可以登陆不同的系统,但达不到一次登陆之后可以访问多个系统。

2FA(双因素认证)

2FA,2 Factor Authentication,双因子验证,是一种安全密码验证方式。区别于传统的密码验证,由于传统的密码验证是由一组静态信息组成,如:字符、图像、手势等,很容易被获取,相对不安全。2FA是基于时间、历史长度、实物(信用卡、SMS手机、令牌、指纹)等自然变量结合一定的加密算法组合出一组动态密码,一般每60秒刷新一次。不容易被获取和破解,相对安全。

总结

您是谁?

您要到那里去?

您如何证明可以到哪里去?

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安全数据交换系统:有效提升网间文件交换能力

各级政府部门和金融、能源、电力这些行业,以及一些大中型企业组织,为了保护内部的重要数据不外泄,普遍都采用了多网络并行的方式,也是做了网络隔离划分,不同的网络拥有不同的密级以及人员权限。然后再通过安全数据交换…

Mac环境下反编译apk

Mac环境下反编译apk 安装反编译工具dex2jar:[官网下载](https://sourceforge.net/projects/dex2jar/)JD-GUI:[官网下载](https://jd-gui.apponic.com/) 实操1. 将需要反编译的 .apk 文件放在下载的 dex2jar 文件夹目录下2. 使用 cd /xxx/dex2jar-2.0 命令…

计算机网络 VLAN

路由器将多个局域网连接起来,而交换机将一个局域网里的设备连接起来。 路由器的端口分配局域网的网段(子网网段),局域网的内部设备的ip都在这个网段里,再由交换机将数据派发到目的设备,交换机是按照MAC地址…

RKE安装k8s及部署高可用rancher

一 了解 Rancher 1 推荐架构 安装 Rancher 的方式有两种:单节点安装和高可用集群安装。因为单节点安装只适用于测试和 demo 环境,而且单节点安装和高可用集群安装之间不能进行数据迁移,所以推荐从一开始就使用高可用集群安装的方式安装 Ran…

CMake入门教程【基础篇】在Windows、Linux上安装CMake

文章目录 1.windows平台第1步:下载CMake第2步:安装CMake第3步:验证安装第4步:初次使用第5步:构建和运行 2.Linux平台2.1 使用包管理器安装2.2 使用预编译的二进制文件2.3 从源代码编译2.4注意事项 1.windows平台 第1步…

Java学习,一文掌握Java之SpringBoot框架学习文集(2)

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

swift-碰到的问题

如何让工程不使用storyboard和scene 删除info.plist里面的Application Scene mainifest 删除SceneDelegate.swift 删除AppDelegate.swift里面的这两个方法 func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession…

aps审核-模电英文稿

模拟电子线路 Analog circuit 需要熟悉课程名,一句话简单概括课程内容,准备一些重点内容介绍。 This course mainly introduces the properties(n.性质) of semiconductors(半导体) and transistors, and then analyzes and masters amplification circ…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)主线程给子线程添加任务以及如何处理该任务

在看此篇文章,建议先看我的往期文章: 基于多反应堆的高并发服务器【C/C/Reactor】(中)在EventLoop的任务队列中添加新任务-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/135346492?spm1001.2014.3001.5501一…

简易机器学习笔记(六)不同优化算法器

前言 我们之前不是说了有关梯度下降公式的事嘛,就是那个 这样梯度下降公式涉及两个问题,一是梯度下降的策略,二是涉及到参数的选择,如果我们选择固定步长的时候,就会发现我们求的值一直在最小值左右震荡&#xff0c…

手机录屏没有声音?让你的录屏有声有色

“有人知道手机录屏怎么录声音吗?今天录制了一个小时的直播视频,后面查看的时候发现没有声音,真的非常崩溃,想问问大家有没有办法,解决这个问题。” 在手机录屏的过程中,有时候我们可能会面临录制视频没有…

电脑如何屏幕录制?轻松录制高清视频

在当今信息化的时代,电脑已经成为工作和生活的重要工具。无论是在进行演示、教学还是记录重要操作步骤时,屏幕录制都是非常有用的。可是电脑如何屏幕录制呢?本篇文章将介绍三种常见的电脑屏幕录制方法,通过学习这些方法&#xff0…