在C#asp.net core 2.1中通过用户名和密码对MQTT服务器上的MQTT客户端进行身份验证
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在C#asp.net core 2.1中通过用户名和密码对MQTT服务器上的MQTT客户端进行身份验证,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1821字,纯文字阅读大概需要3分钟。
内容图文
我想检查MQTT服务器中MQTT客户端的用户名和密码,然后允许其连接.我实现了服务器并从设备发送数据.我获取了数据,但问题是身份验证无法正常工作,因为我需要根据客户端发送的主题从数据库获取客户端信息.到目前为止,我所做的如下:
public async Task Received()
{
var options = new MqttServerOptions();
var mqttServer = new MqttFactory().CreateMqttServer();
mqttServer.ApplicationMessageReceived += (sender, eventArgs) =>
{
var path = eventArgs.ApplicationMessage.Topic;
var device= GetDevice(path);
options.ConnectionValidator = p =>
{
if (p.Username != device.username || p.Password != device.password)
{
p.ReturnCode = MqttConnectReturnCode.ConnectionRefusedBadUsernameOrPassword;
}
};
};
mqttServer.ClientConnected += (s, e) => { };
mqttServer.ClientDisconnected += (s, e) => { };
mqttServer.ClientSubscribedTopic += (s, e) => { };
mqttServer.ClientUnsubscribedTopic += (s, e) => { };
mqttServer.Started += (s, e) => { };
mqttServer.Stopped += (s, e) => { };
await mqttServer.StartAsync(options);
}
这段代码在我的启动中
app.UseMqttServer(server =>
{
server.Started += async (sender, args) => await myClass.Received();
});
我可以用我的方法获得请求,但是我很难检查用户名和密码.
解决方法:
您可以通过在客户端尝试发布/订阅无效主题时断开客户端连接来实现此目的.
这意味着使用授权而不是身份验证来执行策略.只能使用MQTT连接消息中可用的参数来完成身份验证.客户端ID,密码.
为此,服务器启动时需要设置ConnectionValidator事件处理程序.它可以记录客户端尝试连接的客户端ID和密码,并始终允许连接继续进行.
当客户端发布/订阅主题时,将调用ApplicationMessageReceived事件处理程序.此事件处理程序可以验证客户端与数据库中的客户端连接时传入的客户端ID和密码(根据需要使用主题).如果路径,客户端ID和密码无效,则需要显式断开客户端连接.
通过使用mqttServer.GetClientSessionsStatus()在服务器上所有会话的列表中找到客户端,可以显式断开客户端的连接.然后在客户端会话上调用DisconnectAsync().
内容总结
以上是互联网集市为您收集整理的在C#asp.net core 2.1中通过用户名和密码对MQTT服务器上的MQTT客户端进行身份验证全部内容,希望文章能够帮你解决在C#asp.net core 2.1中通过用户名和密码对MQTT服务器上的MQTT客户端进行身份验证所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。