Nacos2.3默认密钥登录是因为历史遗留问题,可以通过配置鉴权插件实现token校验。
【nacos2.3版本为什么还能使用默认密钥登录,如何配置可校验token?】
在nacos2.3版本中,默认情况下,用户可以使用默认密钥登录,这是因为nacos默认提供了一个内置的用户和密码验证机制,该机制允许用户使用默认的用户名和密码进行身份验证,默认情况下,用户名为"admin",密码为"nacos"。
为了提高系统的安全性,我们可以配置nacos以使用可校验的token来进行身份验证,下面是配置nacos以使用可校验token的步骤:
1、添加依赖项:确保你的项目中包含了必要的依赖项,对于nacos2.3版本,你需要引入以下依赖:
<dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacosclient</artifactId> <version>2.3.0</version> </dependency>
2、创建Token验证类:接下来,创建一个用于生成和验证token的类,这个类将包含一些用于生成token、解析token以及验证token的方法,以下是一个简单的示例:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
public class TokenValidator {
private static final String SECRET_KEY = "yourSecretKey"; // 替换为你自己的密钥
private static final long EXPIRATION_TIME = 3600 1000; // 设置token过期时间为1小时(单位毫秒)
public String generateToken(String username) {
String token = username + "|" + System.currentTimeMillis();
return Base64.getEncoder().encodeToString(token.getBytes());
}
public boolean validateToken(String token) {
try {
String[] parts = new String(Base64.getDecoder().decode(token)).split("\\|");
if (parts.length != 2) {
return false;
}
String username = parts[0];
long expirationTime = Long.parseLong(parts[1]);
if (System.currentTimeMillis() > expirationTime) {
return false;
}
// 在这里可以添加其他验证逻辑,比如检查用户名是否存在等。
return true;
} catch (IllegalArgumentException e) {
return false;
}
}
}
请注意,上述代码中的SECRET_KEY
需要替换为你自己的密钥,你还可以根据实际情况调整EXPIRATION_TIME
的值来设置token的过期时间。
3、修改登录逻辑:你需要修改nacos的登录逻辑,以便在用户尝试登录时生成并验证token,下面是一个示例:
import com.alibaba.nacos.api.NacosFactory; import com.alibaba.nacos.api.config.ConfigService; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.naming.NamingService; import com.alibaba.nacos.api.naming.pojo.Instance; import com.alibaba.nacos.auth.credentials.Credentials; import com.alibaba.nacos.auth.credentials.CredentialsMatcher; import com.alibaba.nacos.auth.credentials.TokenCredentials; import com.alibaba.nacos.auth.impl.*; import com.alibaba.nacos.common.utils.*; import org.apache.commons.lang3.StringUtils; import org.springframework.util.*; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.nio.*; import java.security.*; import java.util.*; import java.util.concurrent.*; import javax.servlet.*; import javax.servlet.*; import javax.servlet.*; import javax.servlet.*; import javax.servlet.*; import javax.servlet.*; import javax.servlet.*; import javax.servlet.*; import javax.servlet.*; import javax
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/463008.html