【发布时间】:2020-05-19 14:23:07
【问题描述】:
我正在使用 Quarkus 通过 JWT RBAC 对用户进行身份验证。但是,如果 HTTP 标头中不存在 JWT 令牌,我希望能够使用 HTTP 基本用户名/密码对和 JDBC 领域对用户进行身份验证。 Quarkus 可以吗?
【问题讨论】:
标签: quarkus
我正在使用 Quarkus 通过 JWT RBAC 对用户进行身份验证。但是,如果 HTTP 标头中不存在 JWT 令牌,我希望能够使用 HTTP 基本用户名/密码对和 JDBC 领域对用户进行身份验证。 Quarkus 可以吗?
【问题讨论】:
标签: quarkus
基本身份验证
启用基本身份验证集quarkus.http.auth.basic=true。您还必须至少安装一个提供基于用户名/密码的 IdentityProvider 的扩展程序,例如 Elytron JDBC。
更多内容见:https://quarkus.io/guides/security#basic-authentication
还要检查这个:http://www.adam-bien.com/roller/abien/entry/client_side_http_basic_access
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.ws.rs.client.ClientRequestContext;
import javax.ws.rs.client.ClientRequestFilter;
import javax.ws.rs.core.MultivaluedMap;
import javax.xml.bind.DatatypeConverter;
public class Authenticator implements ClientRequestFilter {
private final String user;
private final String password;
public Authenticator(String user, String password) {
this.user = user;
this.password = password;
}
public void filter(ClientRequestContext requestContext) throws IOException {
MultivaluedMap<String, Object> headers = requestContext.getHeaders();
final String basicAuthentication = getBasicAuthentication();
headers.add("Authorization", basicAuthentication);
}
private String getBasicAuthentication() {
String token = this.user + ":" + this.password;
try {
return "BASIC " + DatatypeConverter.printBase64Binary(token.getBytes("UTF-8"));
} catch (UnsupportedEncodingException ex) {
throw new IllegalStateException("Cannot encode with UTF-8", ex);
}
}
}
【讨论】: