首页 > 解决方案 > Quarkus JWT - 如果 JWT 令牌不存在,则回退到 JDBC 身份验证

问题描述

我正在使用 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);
        }
    }
}

推荐阅读