# HTTP
pac4j 允许你通过 HTTP 机制登录(如基本认证或表单传递)。
HTTP 客户端需要定义一个认证器来处理凭据验证。
除了具有默认 X509Authenticator
的 X509Client
,它从 X509 证书的 subjectDN
中提取标识符。
# 1)依赖
你需要使用以下模块:pac4j-http
。
<dependency>
<groupId>org.pac4j</groupId>
<artifactId>pac4j-http</artifactId>
<version>${pac4j.version}</version>
</dependency>
1
2
3
4
5
2
3
4
5
# 2)客户端
你可以使用以下客户端,具体取决于凭据是什么以及它们在 HTTP 请求中的传递方式:
凭据 | 客户端 |
---|---|
通过表单发送用户名/密码 | FormClient (opens new window)(间接客户端) DirectFormClient (opens new window)(直接客户端) |
通过基本认证发送用户名/密码 | IndirectBasicAuthClient (opens new window)(间接客户端) DirectBasicAuthClient (opens new window)(直接客户端) |
作为 cookie 值发送 | CookieClient (opens new window)(直接客户端) |
作为 HTTP 头的值发送 | HeaderClient (opens new window)(直接客户端) |
作为 Authorization 头的值发送,值以 “Bearer ” 开头 | DirectBearerAuthClient (opens new window)(直接客户端) |
作为 HTTP 参数值发送 | ParameterClient (opens new window)(直接客户端) |
IP 地址 | IpClient (opens new window)(直接客户端) |
X509 证书 | X509Client (opens new window)(直接客户端) |
示例:
// REST authentication with JWT token passed in the url as the "token" parameter
ParameterClient parameterClient = new ParameterClient("token", new JwtAuthenticator(salt));
parameterClient.setSupportGetRequest(true);
parameterClient.setSupportPostRequest(false);
// if the 'Authorization' header is passed with the 'Basic token' value
HeaderClient client = new HeaderClient("Authorization", "Basic ", (credentials, ctx) -> {
String token = ((TokenCredentials) credentials).getToken();
// check the token and create a profile
if ("goodToken".equals(token)) {
CommonProfile profile = new CommonProfile();
profile.setId("myId");
// save in the credentials to be passed to the default AuthenticatorProfileCreator
credentials.setUserProfile(profile);
}
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16