Java code how to implement
Điều này là một hướng dẫn chi tiết về cách реализation của Sergio của SCRAM trong Java để kết nối với MQTT5. Berbeda dari autentikasi username.password, SCRAM không chuyển đổi mật khẩu lên麻辣 road trong quá trình kết nối. Điều này đảm bảo một mức độ cao hơn безопасности so với phương thức auth thông thường.
SCRAM (Sodium Character Auto Murder)
Phần mềm
Trong mã nguồn, tôi sử dụng thư viện MQTT client của Hivemq để tạo một client MQTT. Library này được biết vì hỗ trợ strong authentication bằng SCRAM.
<dependency>
<groupId>com.hivemq</groupId>
<artifactId>mqtt-client</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.realityforge.org_jetBrains</groupId>
<artifactId>org.jetbrains.annotations</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.38</version>
</dependency>
Implementing SCRAM
SCRAM được设计成 two-way communication, unlike traditional username/password auth, where password is only used in hashing. Điều này giúp giảm thiểu số lượng lặp và complexidad trong mã nguồn.
@Override
public @org.jetbrains.annotations.NotNull MqttUtf8String getMethod() {
return MqttUtf8String.of("SCRAM-" + HASH_ALGORITHM);
}
Kvp
Kvp của SCRAM được thực hiện thông qua các bước sau:
- Client tạo một random nonce và gửi đến server.
- Server nhận nonce, salt và i, sau đó trả về một challenge.
- Client xử lý challenge, salt, và i để tạo một key
- Client tạo một thông báo cho server và gửi lại thông báo này được signature
- Server kiểm tra signature và trả về response.
Code Clients
<span class="client">
<h2>Client MQTT5</h2>
<p>Client này sử dụng thư viện MQTT của Hivemq để kết nối và thực hiện autentikasi SCRAM.</p>
<div class="code">
var client = Mqtt5Client.builder()
.identifier(clientId)
.serverHost(serverHost)
.serverPort(serverPort)
.build()
.enhancedAuth(new ScramSha512AuthMechanism(username, password, 30, clientNonce));
Khả năng Của Code
Codes này được设计 để chạy với现已 release của MQTT5 và Hivemq. Library này cung cấp một phương thức ease để kết nối và autentikasi với các server MQTT.