quarkus - Quarkus JWT - 如果 JWT 令牌不存在,则回退到 JDBC 身份验证
问题描述
我正在使用 Quarkus 通过 JWT RBAC 对用户进行身份验证。但是,如果 HTTP 标头中不存在 JWT 令牌,我希望能够使用 HTTP 基本用户名/密码对和 JDBC 领域对用户进行身份验证。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);
}
}
}
推荐阅读
- apache-kafka - 在 apache-beam 中写入多个 Kafka 主题?
- android - CurvedNavigationBar setState 错误:找不到 Getter:'userId'。搜索(用户ID:用户ID,),
- neo4j - 在 cypher Neo4j 中处理嵌套的可选数据
- sql - oracle如何将各行的数据显示到一列?
- c - stdint.h include_next'd from stdint.h not found
- javascript - 如何防止表单提交,执行一些 JavaScript,然后在将数据传递到 NODE 时运行表单?
- angular - ngClass 最初不应用 css 类,仅在单击后
- firebase-cloud-messaging - FCM 到单个设备的最大消息速率
- c# - 参数 1:无法从 'System.Timespan' 转换为 'Instasharper.Classes.IRequestDelay'
- python - “它是如何找到 libpython 的?!” 谜