25 | 认证机制:应用程序如何进行访问认证?
孔令飞
该思维导图由 AI 生成,仅供参考
你好,我是孔令飞,今天我们来聊聊如何进行访问认证。
保证应用的安全是软件开发的最基本要求,我们有多种途径来保障应用的安全,例如网络隔离、设置防火墙、设置 IP 黑白名单等。不过在我看来,这些更多是从运维角度来解决应用的安全问题。作为开发者,我们也可以从软件层面来保证应用的安全,这可以通过认证来实现。
这一讲,我以 HTTP 服务为例,来给你介绍下当前常见的四种认证方法:Basic、Digest、OAuth、Bearer。还有很多基于这四种方法的变种,这里就不再介绍了。
IAM 项目使用了 Basic、Bearer 两种认证方法。这一讲,我先来介绍下这四种认证方法,下一讲,我会给你介绍下 IAM 项目是如何设计和实现访问认证功能的。
认证和授权有什么区别?
在介绍四种基本的认证方法之前,我想先带你区分下认证和授权,这是很多开发者都容易搞混的两个概念。
认证(Authentication,英文缩写 authn):用来验证某个用户是否具有访问系统的权限。如果认证通过,该用户就可以访问系统,从而创建、修改、删除、查询平台支持的资源。
授权(Authorization,英文缩写 authz):用来验证某个用户是否具有访问某个资源的权限,如果授权通过,该用户就能对资源做增删改查等操作。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文详细介绍了应用程序进行访问认证的四种基本方式:Basic、Digest、OAuth和Bearer,并重点讲解了JWT Token认证的原理和流程。文章首先强调了认证和授权的区别,然后逐一介绍了每种认证方式的原理和使用场景。特别是对JWT Token进行了详细解释,包括JWT的格式、认证流程和建议。总的来说,本文通过清晰的图示和简洁的文字,帮助读者快速了解各种认证方式的特点和安全性,对于开发者和系统管理员具有很高的参考价值。文章内容涵盖了认证的基本概念和实际应用,对于想要深入了解认证机制的读者来说,是一篇值得阅读的技术文章。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 语言项目开发实战》,新⼈⾸单¥68
《Go 语言项目开发实战》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(25)
- 最新
- 精选
- pedro问题1:JWT中可新增一个 valid 字段用于表示 token 是否有效,注销后则无效。 问题2:token还是存储在cookie中比较好,可由服务端保存,localstorage在纯前端,中很容易泄露。
作者回复: 满分!
2021-07-221121 - 如来神掌方案挺多,如下: 1、最简单的,客户端直接删除token,但有弊端 2、token计入数据库,登录后对比,注销时删除 3、注销后记录到黑名单,下次登录后清楚黑名单 4、直接记到Redis,注销后删除,登录后存入,类似数据库 ……
作者回复: 老哥回答的很赞。主要是删除token在客户端和服务端的缓存
2021-07-226 - 8.13.3.27.30根据文中认证和授权的解释、我理解Oauth应该属于授权?而不是认证
作者回复: 其实都属于
2021-07-2234 - 授人以🐟,不如授人以渔【JWT 由三部分组成,分别是 Header、Payload 和 Signature,它们之间用圆点.连接,并使用 Base64 编码,例如:JhdWQiOiJpYW0uYXV0aHoubWFybW90ZWR1LmNvbSIsImV4cCI6MTYwNDE1ODk4NywiaWF0IjoxNjA0MTUxNzg3LCJpc3MiOiJpYW1jdGwiLCJuYmYiOjE2MDQxNTE3ODd9.d_2gj3vyEUlMq1b9A0tJoKdLvMInAEfQmdK7XZkB980】 这部分举的例子不是一个 token,token 分为的 3 个部分用 . 连接起来的。
作者回复: 说的对,我找编辑改正下。感谢感谢!
2021-10-173 - Geek_521f9b萌新问一下,这些认证方式是不考虑被抓包的情况吗,建立在https之上,那h264加密是为了什么,直接用base64不行吗
作者回复: base64不是用来认证的。 抓包也抓不到密钥
2022-09-24归属地:广东2 - 杨丁问题1:想完全注销,只能注销时在服务端加token黑名单。客户端删除token并不能使该token在服务端失效 问题2:jwt的优势之一就是无状态,因此我认为localstorage比cookie更好一点
作者回复: 问题1:客户端删除token,就没法访问了。所以,服务端其实不用加黑名单
2021-11-302 - 宙斯digest认证中,“WWW-Authentication头中包含的信息见下表:”,这里的下表,应该没有password吧,否则密码被泄露了
作者回复: 感谢反馈,我们更新下
2021-07-302 - kitten用jwt就是为了节约服务端缓存。jwt token一旦颁发了,在有效期内无法注销。如果在服务端存了这个jwt的缓存,大可不必使用jwt,随机生成一个uuid给客户段就可以做登录凭证了。所以不知道老师出这个题目的目的是什么🤔?
作者回复: jwt可以节约服务端资源,但这不是用jwt的唯一目的。 服务端不会直接缓存token。 用UUID做凭证有很多问题: 1. 没有过期时间 2. UUID不包含用户信息 3. UUID可以伪造,Token有加密算法加密一些信息,更难伪造
2021-07-2522 - The brain is a good thingjwt续签怎么做会比较好呢,服务端是不是要对token的有效期做一个临界点判断?比如设置2小时,还有5分钟就要过期,就会重新生成新的token? 但这样又会有个问题,客户端 超过5分钟没有操作就会导致token失效。并且 client怎么感知 是否应该重新刷新token呢?
作者回复: 续签需要客户端在有效期内主动发起续签操作,服务端自动续签,那这个token不就长期有效了,一旦token被截取,别人就可以长期访问了。 client根据需要判断师傅需要刷新token
2022-06-28归属地:广东1 - 史努比Oauth的密码认证方式和bearer认证方式是啥关系,感觉第一种包含了第二种啊,最后都用到token去做认证
作者回复: 不是包含与被包含的关系。认证流程都不一样
2022-03-091
收起评论