Go 语言项目开发实战
孔令飞
腾讯云专家工程师,前 Red Hat、联想云工程师
41030 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 61 讲
Go 语言项目开发实战
15
15
1.0x
00:00/00:00
登录|注册

25 | 认证机制:应用程序如何进行访问认证?

Signature
Payload
Header
服务端验证Token
客户端携带Token请求
服务端签发Token
服务端验证用户名和密码
客户端请求登录
由JSON数据格式组成
JWT
令牌认证
授权码模式
凭借式
隐藏式
密码式
开放的授权标准
修复了基本认证的缺陷
简单的用户名密码认证
验证用户对资源的权限
验证用户权限
存放Token的最佳位置
解决token注销问题
建议
JWT Token的优点
常用的认证方式
认证的重要性
JWT格式
JWT认证流程
JWT简介
Bearer
OAuth
Digest
Basic
授权(Authorization,authz)
认证(Authentication,authn)
课后练习
总结
基于JWT的Token认证机制实现
四种基本的认证方式
认证和授权
访问认证

该思维导图由 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
立即购买
登录 后留言

全部留言(25)

  • 最新
  • 精选
  • pedro
    问题1:JWT中可新增一个 valid 字段用于表示 token 是否有效,注销后则无效。 问题2:token还是存储在cookie中比较好,可由服务端保存,localstorage在纯前端,中很容易泄露。

    作者回复: 满分!

    2021-07-22
    11
    21
  • 如来神掌
    方案挺多,如下: 1、最简单的,客户端直接删除token,但有弊端 2、token计入数据库,登录后对比,注销时删除 3、注销后记录到黑名单,下次登录后清楚黑名单 4、直接记到Redis,注销后删除,登录后存入,类似数据库 ……

    作者回复: 老哥回答的很赞。主要是删除token在客户端和服务端的缓存

    2021-07-22
    6
  • 8.13.3.27.30
    根据文中认证和授权的解释、我理解Oauth应该属于授权?而不是认证

    作者回复: 其实都属于

    2021-07-22
    3
    4
  • 授人以🐟,不如授人以渔
    【JWT 由三部分组成,分别是 Header、Payload 和 Signature,它们之间用圆点.连接,并使用 Base64 编码,例如:JhdWQiOiJpYW0uYXV0aHoubWFybW90ZWR1LmNvbSIsImV4cCI6MTYwNDE1ODk4NywiaWF0IjoxNjA0MTUxNzg3LCJpc3MiOiJpYW1jdGwiLCJuYmYiOjE2MDQxNTE3ODd9.d_2gj3vyEUlMq1b9A0tJoKdLvMInAEfQmdK7XZkB980】 这部分举的例子不是一个 token,token 分为的 3 个部分用 . 连接起来的。

    作者回复: 说的对,我找编辑改正下。感谢感谢!

    2021-10-17
    3
  • Geek_521f9b
    萌新问一下,这些认证方式是不考虑被抓包的情况吗,建立在https之上,那h264加密是为了什么,直接用base64不行吗

    作者回复: base64不是用来认证的。 抓包也抓不到密钥

    2022-09-24归属地:广东
    2
  • 杨丁
    问题1:想完全注销,只能注销时在服务端加token黑名单。客户端删除token并不能使该token在服务端失效 问题2:jwt的优势之一就是无状态,因此我认为localstorage比cookie更好一点

    作者回复: 问题1:客户端删除token,就没法访问了。所以,服务端其实不用加黑名单

    2021-11-30
    2
  • 宙斯
    digest认证中,“WWW-Authentication头中包含的信息见下表:”,这里的下表,应该没有password吧,否则密码被泄露了

    作者回复: 感谢反馈,我们更新下

    2021-07-30
    2
  • kitten
    用jwt就是为了节约服务端缓存。jwt token一旦颁发了,在有效期内无法注销。如果在服务端存了这个jwt的缓存,大可不必使用jwt,随机生成一个uuid给客户段就可以做登录凭证了。所以不知道老师出这个题目的目的是什么🤔?

    作者回复: jwt可以节约服务端资源,但这不是用jwt的唯一目的。 服务端不会直接缓存token。 用UUID做凭证有很多问题: 1. 没有过期时间 2. UUID不包含用户信息 3. UUID可以伪造,Token有加密算法加密一些信息,更难伪造

    2021-07-25
    2
    2
  • The brain is a good thing
    jwt续签怎么做会比较好呢,服务端是不是要对token的有效期做一个临界点判断?比如设置2小时,还有5分钟就要过期,就会重新生成新的token? 但这样又会有个问题,客户端 超过5分钟没有操作就会导致token失效。并且 client怎么感知 是否应该重新刷新token呢?

    作者回复: 续签需要客户端在有效期内主动发起续签操作,服务端自动续签,那这个token不就长期有效了,一旦token被截取,别人就可以长期访问了。 client根据需要判断师傅需要刷新token

    2022-06-28归属地:广东
    1
  • 史努比
    Oauth的密码认证方式和bearer认证方式是啥关系,感觉第一种包含了第二种啊,最后都用到token去做认证

    作者回复: 不是包含与被包含的关系。认证流程都不一样

    2022-03-09
    1
收起评论
显示
设置
留言
25
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部