硬核總結(jié) 9 個(gè)關(guān)于認(rèn)證授權(quán)的常見(jiàn)問(wèn)題!看看自己能回答幾個(gè)!
大家好,我是Guide哥!相信很多人对认证授权方面都不是特别了解,搞不清Session认证、JWT以及Cookie这些概念。所以,根据我根据日常对这部分学习已经在项目中的实际运用总结了这8 个相关的问题并且附上了详细的回答(这篇文章这么晚才发的原因)。
所有问题如下,开始看答案之前不妨自己测验一下自己究竟能回答几个。
ps:部分问题其实我在之前写JWT相关的文章的时候已经提到过了,看过的朋友看一下自己还记得不?
1. 认证 (Authentication) 和授权(Authorization)的区别是什么?这是一个绝大多数人都会混淆的问题。
首先先从读音上来认识这两个名词,很多人都会把它俩的读音搞混,所以我建议你先先去查一查这两个单词到底该怎么读,他们的具体含义是什么。
说简单点就是:
认证 (Authentication): 你是谁。
授权 (Authorization): 你有权限干什么。
稍微正式点(啰嗦点)的说法就是:
- Authentication(认证)是验证您的身份的凭据(例如用户名/用户ID和密码),通过这个凭据,系统得以知道你就是你,也就是说系统存在你这个用户。所以,Authentication被称为身份/用户验证。
- Authorization(授权) 发生在 Authentication(认证)之后。授权嘛,光看意思大家应该就明白,它主要掌管我们访问系统的权限。比如有些特定资源只能具有特定权限的人才能访问比如admin,有些对系统资源操作比如删除、添加、更新只能特定人才具有。
这两个一般在我们的系统中被结合在一起使用,目的就是为了保护我们系统的安全性。
2. 什么是Cookie ? Cookie的作用是什么?如何在服务端使用 Cookie ?
2.1 什么是Cookie ? Cookie的作用是什么?
Cookie 和 Session都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一样。
维基百科是这样定义 Cookie 的:Cookies是某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密)。简单来说:Cookie存放在客户端,一般用来保存用户信息。
下面是 Cookie 的一些应用案例:
- 我们在 Cookie 中保存已经登录过的用户信息,下次访问网站的时候页面可以自动帮你登录的一些基本信息给填了。除此之外,Cookie还能保存用户首选项,主题和其他设置信息。
- 使用Cookie 保存 session 或者 token ,向后端发送请求的时候带上Cookie,这样后端就能取到session或者token了。这样就能记录用户当前的状态了,因为 HTTP 协议是无状态的。
- Cookie还可以用来记录和分析用户行为。举个简单的例子你在网上购物的时候,因为HTTP协议是没有状态的,如果服务器想要获取你在某个页面的停留状态或者看了哪些商品,一种常用的实现方式就是将这些信息存放在Cookie
2.2 如何在服务端使用 Cookie 呢?
这部分内容参考:https://attacomsian.com/blog/cookies-spring-boot,更多如何在SpringBoot中使用Cookie 的内容可以查看这篇文章。
1)设置cookie返回给客户端
2) 使用Spring框架提供的@CookieValue注解获取特定的 cookie的值
3) 读取所有的 Cookie 值
3. Cookie 和 Session 有什么区别?如何使用Session进行身份验证?
Session 的主要作用就是通过服务端记录用户的状态。典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP协议是无状态的。服务端给特定的用户创建特定的 Session之后就可以标识这个用户并且跟踪这个用户了。
Cookie 数据保存在客户端(浏览器端),Session 数据保存在服务器端。相对来说 Session 安全性更高。如果使用Cookie的一些敏感信息不要写入 Cookie 中,最好能将 Cookie 信息加密然后使用到的时候再去服务器端解密。
那么,如何使用Session进行身份验证?
很多时候我们都是通过 SessionID 来实现特定的用户,SessionID 一般会选择存放在Redis中。举个例子:用户成功登陆系统,然后返回给客户端具有 SessionID 的 Cookie,当用户向后端发起请求的时候会把SessionID带上,这样后端就知道你的身份状态了。关于这种认证方式更详细的过程如下:
Session Based Authentication flow
- 用户向服务器发送用户名和密码用于登陆系统。
- 服务器验证通过后,服务器为用户创建一个 Session,并将 Session信息存储 起来。
- 服务器向用户返回一个 SessionID,写入用户的 Cookie。
- 当用户保持登录状态时,Cookie 将与每个后续请求一起被发送出去。
- 服务器可以将存储在 Cookie 上的 Session ID 与存储在内存中或者数据库中的 Session信息进行比较,以验证用户的身份,返回给用户客户端响应信息的时候会附带用户当前的状态。
使用 Session 的时候需要注意下面几个点:
- 依赖Session的关键业务一定要确保客户端开启了Cookie。
- 注意Session的过期时间
花了个图简单总结了一下Session认证涉及的一些东西。
另外,Spring Session提供了一种跨多个应用程序或实例管理用户会话信息的机制。如果想详细了解可以查看下面几篇很不错的文章:
- Getting Started with Spring Session
- Guide to Spring Session
- Sticky Sessions with Spring Session & Redis
4.如果没有Cookie的话Session还能用吗?这是一道经典的面试题!
一般是通过 Cookie 来保存 SessionID ,假如你使用了 Cookie 保存SessionID的方案的话,如果客户端禁用了Cookie,那么Seesion就无法正常工作。
但是,并不是没有 Cookie 之后就不能用 Session 了,比如你可以将SessionID放在请求的url里面https://javaguide.cn/?session_id=xxx。这种方案的话可行,但是安全性和用户体验感降低。当然,为了你也可以对SessionID 进行一次加密之后再传入后端。
5.为什么Cookie 无法防止CSRF攻击,而token可以?
CSRF(Cross Site Request Forgery)一般被翻译为 跨站请求伪造。那么什么是 跨站请求伪造呢?说简单用你的身份去发送一些对你不友好的请求。举个简单的例子:
小壮登录了某网上银行,他来到了网上银行的帖子区,看到一个帖子下面有一个链接写着“科学理财,年盈利率过万”,小壮好奇的点开了这个链接,结果发现自己的账户少了10000元。这是这么回事呢?原来黑客在链接中藏了一个请求,这个请求直接利用小壮的身份给银行发送了一个转账请求,也就是通过你的Cookie向银行发出请求。
科学理财,年盈利率过万
上面也提到过,进行Session 认证的时候,我们一般使用 Cookie来存储SessionId,当我们登陆后后端生成一个SessionId放在Cookie中返回给客户端,服务端通过Redis或者其他存储工具记录保存着这个Sessionid,客户端登录以后每次请求都会带上这个SessionId,服务端通过这个SessionId来标示你这个人。如果别人通过cookie拿到了SessionId 后就可以代替你的身份访问系统了。
Session 认证中 Cookie 中的SessionId是由浏览器发送到服务端的,借助这个特性,攻击者就可以通过让用户误点攻击链接,达到攻击效果。
但是,我们使用 token 的话就不会存在这个问题,在我们登录成功获得 token 之后,一般会选择存放在 localstorage中。然后我们在前端通过某些方式会给每个发到后端的请求加上这个 token,这样就不会出现CSRF漏洞的问题。因为,即使有个你点击了非法链接发送了请求到服务端,这个非法请求是不会携带 token 的,所以这个请求将是非法的。
需要注意的是不论是 Cookie 还是 token 都无法避免跨站脚本攻击(Cross Site Scripting)XSS。
“跨站脚本攻击(Cross Site Scripting)缩写为 CSS 但这会与层叠样式表(CascadingStyleSheets,CSS)的缩写混淆。因此,有人将跨站脚本攻击缩写为XSS。”XSS中攻击者会用各种方式将恶意代码注入到其他用户的页面中。就可以通过脚本盗用信息比如cookie。
6. 什么是 Token?什么是 JWT?如何基于Token进行身份验证?我们在上一个问题中探讨了使用 Session来鉴别用户的身份,并且给出了几个Spring Session 的案例分享。 我们知道 Session信息需要保存一份在服务器端。这种方式会带来一些麻烦,比如需要我们保证保存 Session信息服务器的可用性、不适合移动端(依赖Cookie)等等。
有没有一种不需要自己存放 Session 信息就能实现身份验证的方式呢?使用 Token 即可!JWT (JSON WebToken)就是这种方式的实现,通过这种方式服务器端就不需要保存 Session 数据了,只用在客户端保存服务端返回给客户的 Token就可以了,扩展性得到提升。
JWT 本质上就一段签名的 JSON 格式的数据。由于它是带有签名的,因此接收者便可以验证它的真实性。
下面是 RFC 7519 对 JWT 做的较为正式的定义。
“JSON Web Token (JWT) is a compact, URL-safe means of representing claims tobetransferred between two parties. The claims in a JWT are encoded as aJSONobject that is used as the payload of a JSON Web Signature (JWS) structureor asthe plaintext of a JSON Web Encryption (JWE) structure, enabling theclaims tobe digitally signed or integrity protected with a MessageAuthentication Code(MAC) and/or encrypted. ——JSON Web Token (JWT)” JWT 由 3部分构成:
Header :描述 JWT 的元数据。定义了生成签名的算法以及 Token 的类型。
Payload(负载):用来存放实际需要传递的数据
Signature(签名):服务器通过Payload、Header和一个密钥(secret)使用 Header 里面指定的签名算法(默认是HMACSHA256)生成。
在基于 Token 进行身份验证的的应用程序中,服务器通过Payload、Header和一个密钥(secret)创建令牌(Token)并将Token发送给客户端,客户端将 Token 保存在 Cookie 或者 localStorage里面,以后客户端发出的所有请求都会携带这个令牌。你可以把它放在Cookie 里面自动发送,但是这样不能跨域,所以更好的做法是放在 HTTP Header 的Authorization字段中:Authorization:Bearer Token。
Token Based Authentication flow
用户向服务器发送用户名和密码用于登陆系统。
身份验证服务响应并返回了签名的 JWT,上面包含了用户是谁的内容。
用户以后每次向后端发请求都在Header中带上 JWT。
服务端检查 JWT 并从中获取用户相关信息。
7 什么是OAuth 2.0?OAuth 是一个行业的标准授权协议,主要用来授权第三方应用获取有限的权限。而 OAuth 2.0是对 OAuth1.0的完全重新设计,OAuth 2.0更快,更容易实现,OAuth 1.0 已经被废弃。详情请见:rfc6749。
实际上它就是一种授权机制,它的最终目的是为第三方应用颁发一个有时效性的令牌 token,使得第三方应用能够通过该令牌获取相关的资源。
OAuth 2.0 比较常用的场景就是第三方登录,当你的网站接入了第三方登录的时候一般就是使用的 OAuth 2.0 协议。
另外,现在OAuth 2.0也常见于支付场景(微信支付、支付宝支付)和开发平台(微信开放平台、阿里开放平台等等)。
微信支付账户相关参数:
8 什么是 SSO?SSO(SingleSignOn)即单点登录说的是用户登陆多个子系统的其中一个就有权访问与其相关的其他系统。举个例子我们在登陆了京东金融之后,我们同时也成功登陆京东的京东超市、京东家电等子系统。
9.SSO与OAuth2.0的区别OAuth是一个行业的标准授权协议,主要用来授权第三方应用获取有限的权限。SSO解决的是一个公司的多个相关的自系统的之间的登陆问题比如京东旗下相关子系统京东金融、京东超市、京东家电等等。
参考https://medium.com/@sherryhsu/session-vs-token-based-authentication-11a6c5ac45e4
https://www.varonis.com/blog/what-is-oauth/
https://tools.ietf.org/html/rfc6749
推薦系統(tǒng)
雨林木風(fēng) winxp下載 純凈版 永久激活 winxp ghost系統(tǒng) sp3 系統(tǒng)下載
系統(tǒng)大?。?/em>0MB系統(tǒng)類(lèi)型:WinXP雨林木風(fēng)在系統(tǒng)方面技術(shù)積累雄厚深耕多年,打造了國(guó)內(nèi)重裝系統(tǒng)行業(yè)知名品牌,雨林木風(fēng)WindowsXP其系統(tǒng)口碑得到許多人認(rèn)可,積累了廣大的用戶群體,是一款穩(wěn)定流暢的系統(tǒng),雨林木風(fēng) winxp下載 純凈版 永久激活 winxp ghost系統(tǒng) sp3 系統(tǒng)下載,有需要的朋友速度下載吧。
系統(tǒng)等級(jí):進(jìn)入下載 >蘿卜家園win7純凈版 ghost系統(tǒng)下載 x64 聯(lián)想電腦專(zhuān)用
系統(tǒng)大?。?/em>0MB系統(tǒng)類(lèi)型:Win7蘿卜家園win7純凈版是款非常純凈的win7系統(tǒng),此版本優(yōu)化更新了大量的驅(qū)動(dòng),幫助用戶們進(jìn)行舒適的使用,更加的適合家庭辦公的使用,方便用戶,有需要的用戶們快來(lái)下載安裝吧。
系統(tǒng)等級(jí):進(jìn)入下載 >雨林木風(fēng)xp系統(tǒng) xp系統(tǒng)純凈版 winXP ghost xp sp3 純凈版系統(tǒng)下載
系統(tǒng)大?。?/em>1.01GB系統(tǒng)類(lèi)型:WinXP雨林木風(fēng)xp系統(tǒng) xp系統(tǒng)純凈版 winXP ghost xp sp3 純凈版系統(tǒng)下載,雨林木風(fēng)WinXP系統(tǒng)技術(shù)積累雄厚深耕多年,采用了新的系統(tǒng)功能和硬件驅(qū)動(dòng),可以更好的發(fā)揮系統(tǒng)的性能,優(yōu)化了系統(tǒng)、驅(qū)動(dòng)對(duì)硬件的加速,加固了系統(tǒng)安全策略,運(yùn)行環(huán)境安全可靠穩(wěn)定。
系統(tǒng)等級(jí):進(jìn)入下載 >蘿卜家園win10企業(yè)版 免激活密鑰 激活工具 V2023 X64位系統(tǒng)下載
系統(tǒng)大小:0MB系統(tǒng)類(lèi)型:Win10蘿卜家園在系統(tǒng)方面技術(shù)積累雄厚深耕多年,打造了國(guó)內(nèi)重裝系統(tǒng)行業(yè)的蘿卜家園品牌,(win10企業(yè)版,win10 ghost,win10鏡像),蘿卜家園win10企業(yè)版 免激活密鑰 激活工具 ghost鏡像 X64位系統(tǒng)下載,其系統(tǒng)口碑得到許多人認(rèn)可,積累了廣大的用戶群體,蘿卜家園win10純凈版是一款穩(wěn)定流暢的系統(tǒng),一直以來(lái)都以用戶為中心,是由蘿卜家園win10團(tuán)隊(duì)推出的蘿卜家園
系統(tǒng)等級(jí):進(jìn)入下載 >蘿卜家園windows10游戲版 win10游戲?qū)I(yè)版 V2023 X64位系統(tǒng)下載
系統(tǒng)大?。?/em>0MB系統(tǒng)類(lèi)型:Win10蘿卜家園windows10游戲版 win10游戲?qū)I(yè)版 ghost X64位 系統(tǒng)下載,蘿卜家園在系統(tǒng)方面技術(shù)積累雄厚深耕多年,打造了國(guó)內(nèi)重裝系統(tǒng)行業(yè)的蘿卜家園品牌,其系統(tǒng)口碑得到許多人認(rèn)可,積累了廣大的用戶群體,蘿卜家園win10純凈版是一款穩(wěn)定流暢的系統(tǒng),一直以來(lái)都以用戶為中心,是由蘿卜家園win10團(tuán)隊(duì)推出的蘿卜家園win10國(guó)內(nèi)鏡像版,基于國(guó)內(nèi)用戶的習(xí)慣,做
系統(tǒng)等級(jí):進(jìn)入下載 >windows11下載 蘿卜家園win11專(zhuān)業(yè)版 X64位 V2023官網(wǎng)下載
系統(tǒng)大小:0MB系統(tǒng)類(lèi)型:Win11蘿卜家園在系統(tǒng)方面技術(shù)積累雄厚深耕多年,windows11下載 蘿卜家園win11專(zhuān)業(yè)版 X64位 官網(wǎng)正式版可以更好的發(fā)揮系統(tǒng)的性能,優(yōu)化了系統(tǒng)、驅(qū)動(dòng)對(duì)硬件的加速,使得軟件在WINDOWS11系統(tǒng)中運(yùn)行得更加流暢,加固了系統(tǒng)安全策略,WINDOWS11系統(tǒng)在家用辦公上跑分表現(xiàn)都是非常優(yōu)秀,完美的兼容各種硬件和軟件,運(yùn)行環(huán)境安全可靠穩(wěn)定。
系統(tǒng)等級(jí):進(jìn)入下載 >
相關(guān)文章
- 如何解決銳龍2200g死機(jī)藍(lán)屏
- Win8.1本地搜索為什么無(wú)法使用
- Win8.1無(wú)線網(wǎng)絡(luò)不穩(wěn)定/掉線怎么辦
- 電腦機(jī)箱漏電怎么消除?電腦機(jī)箱漏電是哪里的問(wèn)題?
- 電腦開(kāi)不了機(jī)怎么辦?電腦無(wú)法開(kāi)機(jī)怎么解決?
- 硬盤(pán)雙擊無(wú)法打開(kāi)的問(wèn)題該怎么辦
- 風(fēng)行下載速度慢甚至是為0怎么辦?風(fēng)行播放器下載問(wèn)題及解決方法匯總
- 蘋(píng)果回應(yīng)新的iOS惡意軟件YiSpector:已在iOS8.4中解決該問(wèn)題
- 沒(méi)有路由器怎么連無(wú)線 160wifi 解決沒(méi)有路由器連接無(wú)線問(wèn)題
- 維棠FLV下載視頻失敗問(wèn)題匯總及解決方法
- Word2016 出現(xiàn)“此功能看似已中斷 并需要修復(fù)”問(wèn)題解決方案(圖文)
- Cisco管理的35個(gè)常見(jiàn)問(wèn)題及解答
- NanoStudio怎么用?NanoStudio使用方法及常見(jiàn)問(wèn)題
- IE瀏覽器登錄網(wǎng)上銀行時(shí)出現(xiàn)崩潰問(wèn)題的解決辦法
熱門(mén)系統(tǒng)
推薦軟件
推薦應(yīng)用
推薦游戲
熱門(mén)文章
常用系統(tǒng)
- 1win11最新娛樂(lè)版下載 技術(shù)員聯(lián)盟x64位 ghost系統(tǒng) ISO鏡像 v2023
- 2電腦公司windows7純凈版 ghost x64位 v2022.05 官網(wǎng)鏡像下載
- 3外星人系統(tǒng)Win11穩(wěn)定版系統(tǒng)下載 windows11 64位穩(wěn)定版Ghost V2022
- 4win11一鍵裝機(jī)小白版下載 外星人系統(tǒng) x64位純凈版下載 筆記本專(zhuān)用
- 5蘿卜家園Ghost win10 64位中文版專(zhuān)業(yè)版系統(tǒng)下載 windows10純凈專(zhuān)業(yè)版下載
- 6【國(guó)慶特別版】番茄花園Windows11高性能專(zhuān)業(yè)版ghost系統(tǒng) ISO鏡像下載
- 7青蘋(píng)果系統(tǒng) GHOST WIN7 SP1 X64 專(zhuān)業(yè)優(yōu)化版 V2024
- 8深度技術(shù)ghost win7純凈版最新下載 大神裝機(jī)版 ISO鏡像下載
- 9雨林木風(fēng)windows11中文版免激活 ghost鏡像 V2022.04下載