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

26 | IAM项目是如何设计和实现访问认证功能的?

认证流程
Token认证方式
JWT Token格式
Token签发和返回
登陆接口/login
用户名:密码认证方式
可否使用同一认证策略
GetClaimsFromJWT方法分析
iam-authz-server实现了Bearer认证
iam-apiserver实现了Basic认证和Bearer认证
策略模式
抽象工厂模式
面向接口编程
Bearer认证
Basic认证
梳理清楚认证功能的使用场景和需求
课后练习
总结
IAM项目认证功能设计技巧
IAM项目的认证功能设计
IAM项目认证功能的整体设计思路
IAM项目认证功能设计

该思维导图由 AI 生成,仅供参考

你好,我是孔令飞。
上一讲,我们学习了应用认证常用的四种方式:Basic、Digest、OAuth、Bearer。这一讲,我们再来看下 IAM 项目是如何设计和实现认证功能的。
IAM 项目用到了 Basic 认证和 Bearer 认证。其中,Basic 认证用在前端登陆的场景,Bearer 认证用在调用后端 API 服务的场景下。
接下来,我们先来看下 IAM 项目认证功能的整体设计思路。

如何设计 IAM 项目的认证功能?

在认证功能开发之前,我们要根据需求,认真考虑下如何设计认证功能,并在设计阶段通过技术评审。那么我们先来看下,如何设计 IAM 项目的认证功能。
首先,我们要梳理清楚认证功能的使用场景和需求
IAM 项目的 iam-apiserver 服务,提供了 IAM 系统的管理流功能接口,它的客户端可以是前端(这里也叫控制台),也可以是 App 端。
为了方便用户在 Linux 系统下调用,IAM 项目还提供了 iamctl 命令行工具。
为了支持在第三方代码中调用 iam-apiserver 提供的 API 接口,还支持了 API 调用。
为了提高用户在代码中调用 API 接口的效率,IAM 项目提供了 Go SDK。
可以看到,iam-apiserver 有很多客户端,每种客户端适用的认证方式是有区别的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

IAM项目通过策略模式实现了Basic认证和Bearer认证两种认证方式,并在具体代码中展现了认证的实现细节,为读者提供了全面的认证功能设计和实现方案。文章详细介绍了iam-authz-server和iam-apiserver的Bearer认证实现,以及IAM项目认证功能设计技巧,为读者提供了深入的技术细节和实践经验。IAM项目中,不同客户端适用不同的认证方式,如控制台、App端使用`用户名:密码`的Basic认证,而iamctl、API调用、Go SDK则采用更安全的Bearer认证。IAM项目采用了将API接口注册到API网关中,通过API网关的Token认证功能来实现对API接口的认证。同时,IAM项目还需要调用iam-authz-server提供的RESTful API接口进行资源授权,适合采用Bearer认证。在认证过程中,IAM项目需要将用户名/密码、密钥等信息保存在后端的MySQL中,并考虑内存和数据库的数据一致性。IAM项目中实现了Basic认证和Bearer认证两种认证方式。Basic认证通过用户名和密码进行认证,通常用在登陆接口,登陆成功后会返回JWT Token,前端会保存该Token在浏览器的Cookie或LocalStorage中,供后续请求使用。总的来说,IAM项目通过策略模式实现了Basic认证和Bearer认证两种认证方式,并在具体代码中展现了认证的实现细节,为读者提供了全面的认证功能设计和实现方案。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 语言项目开发实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(16)

  • 最新
  • 精选
  • helloworld
    本文的意思是说正常的生产环境下,iam-apiserver和iam-authz-server的api的认证功能其实都应该放到网关来实现的,本文之所以由iam项目亲自来实现就是为了方便讲解认证的具体实现方法,我理解的对不对?

    作者回复: 老哥理解的没毛病

    2021-07-26
    8
  • Geek_f23c82
    麻烦问下authserver什么时候派发的jwt token?

    作者回复: iamctl jwt sign 通过这个命令签发token,authzserver解析token进行认证

    2022-05-29归属地:广东
    3
  • jwt需要后端解析并从缓存中拿用户对应秘钥在进行运算进行鉴权,这些流程是不是有点复杂和多余啊,登录时候直接随机生成一个token(uuid hash)传给前端并保存到缓存中,缓存中token直接对应用户的session,每次前端传过来token 根据是否能用token获取缓存中的session来鉴权 这样岂不是实现简单 也安全啊

    作者回复: 这样做不太合理: 1. 如果很多用户,那应用程序会缓存并维护很多session,对应用程序是一种压力,如果应用程序重启,那登录会失效,这种是不合理的 2. jwt token中能够包含很多信息,可以基于这些信息做更多的认证逻辑

    2021-11-11
    3
  • 冷峰
    为什么每个用户都要有一个SecretKey, 所有的用户用同一个SecretKey不行吗?

    作者回复: 这样不安全了,A、B、C都使用同一个secretKey,那都依赖于同一个secretKey,如果A想更改secretKey的过期时间,不就影响到B、C了。secretKey也属于用户资源,每个用于都应该有一个,符合产品设计思路

    2021-08-17
    11
    3
  • 🌀🐑hfy🐣
    请问老师为什么bearer认证里面还要basic认证?

    作者回复: bearer认证中没有basic认证。是不是理解错了?可以再看看,有问题再留言

    2022-09-26归属地:广东
    2
    2
  • season
    第四步,设置HTTP Header username: colin 。 应该是 第四步,给gin.Context中添加 username: colin 。 ?

    作者回复: 嗯嗯,是一样的

    2022-10-13归属地:广东
    1
  • season
    ParseWithClaims怎么理解? func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc) (*Token, error) {} 使用Claims来解析,并返回 token?

    作者回复: 用来解析Token,并将解析后的claims存放到传入的claims变量中

    2022-10-13归属地:广东
    1
  • season
    技巧2:使用抽象工厂模式 auth.go文件中,通过newBasicAuth、newJWTAuth、newAutoAuth创建认证策略时,返回的 都是接口。通过返回接口,可以在不公开内部实现的情况下,让调用者使用你提供的各种认证 功能。 1. 不公开内部实现的情况下,是指不公开哪个函数的内部实现? 2. 让调用者使用你提供的各种认证功能,指的是哪些方法?

    作者回复: 1. 相对于调用者来说,不用公开newBasicAuth、newJWTAuth、newAutoAuth方法的实现。 2. basic认证、jwt认证、和basic+jwt自动选择的认证方式

    2022-10-13归属地:广东
    1
  • jwt貌似不可以实现实时踢人吧 一个账号登录了 在登录一次 让上次的token失效 这个jwt不可以吧

    作者回复: 这个JWT是没这种功能的

    2021-11-29
    4
    1
  • yandongxiao
    总结: IAM系统采用 Basic + bearer 两种认证方式。Basic 认证要求输入用户名和密码,返回 JWT Token;虽然客户端在访问 iam-apiserver 或者 iam-auth-server 时,在 bearer 认证中携带该 Token,服务端对该请求进行认证。 1. 服务端basic认证实现逻辑:通过 gin middleware 实现了签发 JWT 的功能。jwt.New 对象在实例化时,传递多个回调函数,比如 Authentiactor, LoginResponse 等。 2. 服务端bearer认证实现逻辑:在 gin 中以 middleware 的方式存在,借助 jwt package 完成认证。认证完成后,会在 Context 中保存Username,方便后面的handler使用

    作者回复: 总结的好细!

    2021-11-27
    1
收起评论
显示
设置
留言
16
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部