最新要闻
- 5-38℃智能温控:美菱踢脚线取暖器79元起大促
- 世界球精选!10999元!女子苹果店新买iPad无法充电后换机:更杯具了 竟无法开机
- 天天快资讯:离谱!我花1万多买MacBook Pro 居然送来了这种东西
- 暴涨300%以上!P社宣布上调阿根廷等区域游戏价格
- 全球焦点!你的城市在列吗?2022中国最具幸福感10大城市出炉:第一成都14连冠
- 比亚迪单周破5万、特斯拉后劲不足:2022年车市最后时刻迎“小高潮”
- 曾推出过两代产品!曝Redmi K系列电竞版没了
- 焦点!官方科普铁路新规:身高不再是儿童购票唯一标准
- 世界微速讯:吸金34亿元!《阿凡达2》升至全球票房榜第9 紧追《长津湖之水门桥》
- 今日热文:与一加11同时发布!一加Buds Pro 2真无线降噪耳机来了
- 天天有喜大结局是什么?天天有喜演员表
- 蜜糖三部曲是哪部电视剧?蜜糖三部曲有什么关系?
- 华约自主招生是什么意思?华约自主招生考试笔试经验
- 如何用环保袋制作衣服?用环保袋制作衣服的方法有哪些?
- 女医明妃传原型是谁?女医明妃传演员表
- 冒险岛怎么删除角色?冒险岛怎么提升面板?
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
环球速递!.NET Core如何通过认证机制访问Kafka?
大家好,我是Edison。
最近有一个ASP.NET Core使用认证机制访问Kafka的需求,加之我们又使用了CAP这个开源项目使用的Kafka,于是网上寻找了一番发现对应资料太少,于是调查了一番,做了如下的笔记,希望对你有用。
(相关资料图)
背景
在实际场景中,开发环境的Kafka服务器一般没有要求通过认证即可发布和读取消息,并且还可以随意创建Topic和Consumer Group。但是,在生产环境中则一般有较强的安全需求,无法随意创建Topic和Consumer,还做了一些认证和权限约束。而在ASP.NET Core的解决方案中,我们经常使用到CAP这个开源项目作为事件总线,在CAP.Kafka项目中,只提供了最基础的Servers配置,文档示例中也只给出了这种只适合开发环境的配置示例,而对于对安全要求较高的生产环境,则需要我们研究一下Kafka官方的配置文档,在CAP.Kafka的MainConfig对象中进行主动配置Key/Value。
本文会首先介绍一下Kafka的认证机制,然后会给出基于CAP项目通过认证方式访问Kafka的示例。
Kafka认证机制
自 0.9.0.0 版本开始,Kafka 正式引入了认证机制,用于实现基础的安全用户认证,这是将 Kafka 上云或进行多租户管理的必要步骤。目前Kafka的版本,已支持基于 SSL 和 基于 SASL 的安全认证机制。
基于 SSL 的认证主要是指 Broker 和客户端的双路认证(2-way authentication)。通常来说,SSL 加密(Encryption)已经启用了单向认证,即客户端认证 Broker 的证书(Certificate)。如果要做 SSL 认证,那么我们要启用双路认证,也就是说 Broker 也要认证客户端的证书。
Note:Kafka 的源码中依然是使用 SSL 而不是 TLS 来表示这类东西的。不过,今天出现的所有 SSL 字眼,我们都可以认为它们是和 TLS 等价的。
Kafka 还支持通过 SASL 做客户端认证。SASL 是提供认证和数据安全服务的框架。Kafka 支持的 SASL 机制有 5 种:
GSSAPI:也就是 Kerberos 使用的安全接口,是在 0.9 版本中被引入的。
PLAIN:是使用简单的用户名 / 密码认证的机制,在 0.10 版本中被引入。
SCRAM:主要用于解决 PLAIN 机制安全问题的新机制,是在 0.10.2 版本中被引入的。
OAUTHBEARER:是基于 OAuth 2 认证框架的新机制,在 2.0 版本中被引进。
Delegation Token:补充现有 SASL 机制的轻量级认证机制,是在 1.1.0 版本被引入的。
在实际应用中,一般建议 使用 SSL 来做通信加密,使用 SASL 来做 Kafka 的认证实现。对于小型公司来说,SASL/PLAIN 的配置和运维成本相对较小,比较适合Kafka集群配置。
下图将这些认证机制进行了汇总,源自极客时间胡夕《Kafka核心技术与实战》。
通过认证机制使用Kafka
这里假设我们已经搭建好了一个Kafka集群,并且配置了SASL/PLAIN方式,并且创建了一个账号“kafka_user”,密码为"kakfa_user_password@2022abcdlk!",约束客户端只能通过SSL方式带上CA证书加密访问。
假设我们已经有了一个ASP.NET Core应用,并且之前已经在开发环境通过CAP项目使用了Kafka,那么对于生产环境或安全要求较高的测试环境,我们应该如何修改呢?
通过查看CAP的文档,在CAP.Kafka中其实只提供了几个最基础的配置项:
而其他的配置项,我们只能通过CAP.Kafka提供的MainConfig这个Dictionary类进行手动添加,如下所示:
services.AddCap(capOptions => { capOptions.UseKafka(kafkaOption=> { // kafka options. // kafkaOptions.MainConfig.Add("", ""); });});
那么,我们应该添加哪些配置呢?它们的key和可选的value又是哪些呢?CAP给出了一个参考链接:https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md,它是librdkafka项目的配置参数的文档。
通过研究配置项文档,我们大概需要以下一些参数,将其添加到MainConfig字典中,这些参数不仅适配Producer也适配Consumer。
namespace Microsoft.Extensions.DependencyInjection{ public static class ApplicationServiceCollectionExtensions { public static IServiceCollection AddEventBus(this IServiceCollection services, IConfigurationSection configuration) { services.AddCap(option => { option.UseInMemoryStorage(); option.UseKafka(kfkOption => { kfkOption.Servers = configuration["KafkaBootstrapServers"]; if (Convert.ToBoolean(configuration["EnableAuthorization"])) { kfkOption.MainConfig.Add("security.protocol", "sasl_ssl"); kfkOption.MainConfig.Add("sasl.mechanism", "PLAIN"); kfkOption.MainConfig.Add("sasl.username", configuration["SaslUserName"]); kfkOption.MainConfig.Add("sasl.password", configuration["SaslPassword"]); kfkOption.MainConfig.Add("ssl.ca.location", configuration["SslCertificatePath"]); kfkOption.MainConfig.Add("enable.ssl.certificate.verification", configuration["EnableSslCertificateVerification"]); } }); option.SucceedMessageExpiredAfter = 3600 * 24 * Convert.ToInt32(configuration["SuccessMsgExpireDays"]); }); return services; } }}
在Program.cs中调用AddEventBus方法:
builder.Services.AddEventBus(builder.Configuration.GetSection("EventBusConfigs"));
在appsettings中的配置如下:
{ "EventBusConfigs": { "KafkaBootstrapServers": "prd.kafka01.com:9093, prd.kafka02.com:9093, prd.kafka03.com:9093", "SuccessMsgExpireDays": 7, "EnableAuthorization": true, "SaslUserName": "kafka_user", "SaslPassword": "kakfa_user_password@2022abcdlk!", "SslCertificatePath": "resources/certificates/intranet_server_ca.cer", "EnableSslCertificateVerification": true }}
既然是通过证书访问,那么我们得告诉ASP.NET Core这个证书放在什么位置,本文示例是放在这个ASP.NET Core应用目录下的,在实际中建议由运维管理员统一放在一个中心服务器位置,挂载到容器内部可以访问,从而保证证书的安全。如果是通过K8s部署,那么将其添加为一个Secret存放是更好的方式。
CAP中的异构系统集成
顺带说一下,在CAP这个项目中,如果你的项目都是基于它来做事件总线,那么CAP可以正常的Publish和Subscribe消息,但是如果在你使用它之前已经有了许多的Topic Messages,它需要和一些第三方系统进行消息传输,这就会涉及到异构系统的集成。如果我们不做一些配置,CAP是无法正常Subscribe和Consume消息的。
因此,在CAP中,我们需要主动对Message做一些改造,添加传递一些额外信息以便于CAP能够在收到消息时提取到关键特征从而正常运作。否则,你会在启动时收到这样一个错误:The given key "cap-msg-id" is not existed........。
我们只需要在注册CAP组件时添加自定义Headers,确保"cap-msg-id"和"cap-msg-name"两个Header值能够被解析到:
namespace Microsoft.Extensions.DependencyInjection{ public static class ApplicationServiceCollectionExtensions { public static IServiceCollection AddEventBus(this IServiceCollection services, IConfigurationSection configuration) { services.AddCap(option => { option.UseInMemoryStorage(); option.UseKafka(kfkOption => { kfkOption.Servers = configuration["KafkaBootstrapServers"]; if (Convert.ToBoolean(configuration["EnableAuthorization"])) { kfkOption.MainConfig.Add("security.protocol", "sasl_ssl"); kfkOption.MainConfig.Add("sasl.mechanism", "PLAIN"); kfkOption.MainConfig.Add("sasl.username", configuration["SaslUserName"]); kfkOption.MainConfig.Add("sasl.password", configuration["SaslPassword"]); kfkOption.MainConfig.Add("ssl.ca.location", configuration["SslCertificatePath"]); kfkOption.MainConfig.Add("enable.ssl.certificate.verification", configuration["EnableSslCertificateVerification"]); } // 以下为新增自定义Headers配置 option.CustomHeaders = e => new List> { new KeyValuePair (DotNetCore.CAP.Messages.Headers.MessageId, SnowflakeId.Default().NextId().ToString()), new KeyValuePair (DotNetCore.CAP.Messages.Headers.MessageName, e.Topic) }; }); option.SucceedMessageExpiredAfter = 3600 * 24 * Convert.ToInt32(configuration["SuccessMsgExpireDays"]); }); return services; } }}
小结
本文介绍了在ASP.NETCore中使用CAP项目通过认证机制安全地使用kafka消息中间件,希望能够对你有所帮助!
参考资料
CAP文档Kafka部分:https://cap.dotnetcore.xyz/user-guide/en/transport/kafka
librdkafka配置项文档:https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md
CAP文档Messaging部分:https://cap.dotnetcore.xyz/user-guide/en/cap/messaging
胡夕《Kafka核心技术与实战》之Kafka认证机制用哪家:https://time.geekbang.org/column/article/118347
作者:周旭龙
出处:https://edisonchou.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
-
环球滚动:配置Git客户端上传代码至Gitlab仓库
1 下载Windows版git客户端Git客户端下载:https: git-scm com downloads双击git exe文件来安装gi...
来源: 环球速递!.NET Core如何通过认证机制访问Kafka?
今日看点:正则表达式?!的理解
环球滚动:配置Git客户端上传代码至Gitlab仓库
5-38℃智能温控:美菱踢脚线取暖器79元起大促
世界球精选!10999元!女子苹果店新买iPad无法充电后换机:更杯具了 竟无法开机
天天快资讯:离谱!我花1万多买MacBook Pro 居然送来了这种东西
暴涨300%以上!P社宣布上调阿根廷等区域游戏价格
全球焦点!你的城市在列吗?2022中国最具幸福感10大城市出炉:第一成都14连冠
CMU15-445:Lecture #01 笔记
比亚迪单周破5万、特斯拉后劲不足:2022年车市最后时刻迎“小高潮”
曾推出过两代产品!曝Redmi K系列电竞版没了
焦点!官方科普铁路新规:身高不再是儿童购票唯一标准
世界微速讯:吸金34亿元!《阿凡达2》升至全球票房榜第9 紧追《长津湖之水门桥》
今日热文:与一加11同时发布!一加Buds Pro 2真无线降噪耳机来了
资讯:一颗红心,三手准备,分别基于图片(img)/SCSS(样式)/SVG动画实现动态拉轰的点赞按钮特效
一篇文章彻底明白java中的重要概念——注解
环球新消息丨【源码透视】SpringBoot的SPI机制
快播:火山引擎 DataTester 为企业降本增效:1 个人也能成为一支 A/B 实验团队
Netty-介绍-1
天天有喜大结局是什么?天天有喜演员表
Mybatis批量插入3种方法
蜜糖三部曲是哪部电视剧?蜜糖三部曲有什么关系?
华约自主招生是什么意思?华约自主招生考试笔试经验
如何用环保袋制作衣服?用环保袋制作衣服的方法有哪些?
全球资讯:青龙面板之淘宝
当前热点-彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-JWT和中间件(Middleware)的使用EP07
全球资讯:数智赋能:透过低代码看企业如何实现数智转型
速读:基于 Dubbo Admin 实现流量灰度
女医明妃传原型是谁?女医明妃传演员表
冒险岛怎么删除角色?冒险岛怎么提升面板?
高考穿什么衣服寓意好?高考穿什么衣服吉利?
红海行动是根据哪个真实事件改编的?红海行动真实事件原型
女娲传说之灵珠大结局是什么?女娲传说之灵珠演员表介绍
福州一中地址在哪里?福州一中录取分数线2022
Qt做大型软件开发技术选型Part2:Qt调用C#编写的COM组件
世界视讯!Cpp Primer:Sec 4, 5, 6
【当前独家】项目管理工具飞项傍身,居家办公效率“快人一步”
要闻:redis—安装以及可视化
还转投N卡阵营吗?国内AMD RX7900 XT货源开始变多 7599元起
最新资讯:本田真爱粉狂喜 全新思域两厢版上市:手动挡卖到16万
三只松鼠年货坚果礼盒大促:109立减60元 49包邮到手
高分天气应用Dark Sky即将关闭:苹果呼吁用户使用自带天气
天天新资讯:谷爱凌再创一新世界纪录:反脚1260板尾抓板女子世界第一
管理经验
环球速看:程序员面试找替身 “作弊” 入职,结果大快人心。。。
影响力无敌!梅西夺冠帖点赞量成Instagram史上第一:球衣被抢光
最纯净的国产手机系统!博主实测努比亚Z50系统广告默认关闭:世界清净了
环球观焦点:当AI作画入侵鬼畜区
全球时讯:不适合中国观众 只有《流浪地球2》?出品方:《阿凡达2》没理由不引进
质感绝了!一加11海外官宣:2月7日登场
【环球新要闻】SSD白菜价先别下单:有猫腻
世界动态:使用brew安装历史版本的几种方式
当前快讯:第一百一十六篇: JavaScript理解对象
世界微资讯!Python参数解析器configparser
民间大神用虚幻5自制《原神》 :这视觉效果爱了
【环球报资讯】曾经缔造玛雅文明!为什么玉米的产量世界第一?
深扒《阿凡达2》背后的故事:才是真的“细思恐极”!
【全球快播报】蔚来CEO李斌回应数据泄露问题 绝不会与不法行为妥协
全球热推荐:我去大疆新总部逛了逛:评测了有史以来最大的“产品”
焦点速递!Python unittest+ddt+openpyxl接口自动化
今日热讯:MAUI新生4.4-笔刷Brush
每日焦点!梅西晒怀抱大力神杯入睡照!淘宝同款奖杯被抢光
速讯:python + selenium实现gitlab全文搜索
热资讯!Codeforces 1763 F Edge Queries 题解
天天视讯!如何使用Yum History查找已安装或已删除的软件包信息
天天新消息丨混合场景
当前热议!神似梅西男子成网红 被民众围堵合影:这也太像了
分析师称《阿凡达2》难以回本:卡梅隆标准定太高了
2199元 掌阅Smart Air Pro电纸书上架:8寸大屏、300PPI显示
前端工程化Vue-cli
天天微头条丨Python unittest数据处理ddt
前端CSS Flex布局8大重难点知识,收藏起来吧
世界新消息丨django10 分页器与Form组件
【全球新要闻】FreeSWITCH学习笔记:XML配置文件
天天即时:怀旧情怀拉满:宾得宣布将开发新款胶片相机
阿根廷夺冠“拯救”伊利 但“奶茅”光环渐黯
环球快讯:一加宣布与OPPO服务融合:12月底全面加入OPPO售后服务系统
东北将迎今冬以来最强降雪:持续时间最长、范围最广
世界速递!框架第九课---ajax补充说明,多对多三种创建方式,django内置序列化组件(drf前身),ORM批量操作数据(ORM操作优化),自定义分页器,f
WPF工控组态软件之温度计
每日播报!Iceberg在袋鼠云的探索及实践
每日关注!hibernate validate工具,小心你的姿势不对
PCIe 5.0 SSD终于满血了!读写都是14GB/s、容量8TB
热消息:蔚来遭遇225万美元数据勒索 官方声明
当前讯息:铃木“大G”!吉姆尼五门版无伪谍照:最多能塞进7个人
奇迹!女子手机从26楼掉落未摔坏 真身竟是这款手机
5499元 联合创新推出新款32英寸显示器:4K MiniLED屏、144Hz高刷
“非洲之王”拥抱新技术:传音首台折叠屏手机已通过蓝牙SIG认证
天天短讯!世界北极熊之都升温过快 已危及北极熊生存:吃不上饭了
天天热资讯!深度学习炼丹-数据处理和增强
世界热门:记录--可视化大屏-用threejs撸一个3d中国地图
Python操作Excel(openpyxl)
全球热点评!Html5 canvas创意特效合集
即时看!1月1日起:澳门私家车可经港珠澳大桥出入内地
观速讯丨巡游大巴太高 梅西险些撞上电缆!他带回阿根廷的大力神杯居然是复制品
天天短讯!中国联通科技人才占比已达30% 曾发话不能再用老眼光看电信行业
空难曾致346人死亡 波音737 Max飞机延期采用最新安全标准
每日观察!广州多个外卖平台下单后配送慢 平台:员工已是全负荷工作
世界视讯!数据结构堆(Heap)&排序&二叉树
今日播报!用好这个任务管理工具,轻松躲避职场明枪暗箭