增加服务端认证详解

This commit is contained in:
LingZhaoHui 2024-09-21 00:16:32 +08:00
parent f2e6ed9058
commit a15bc6f3ac
Signed by: zeekling
GPG Key ID: D96E4E75267CA2CC

View File

@ -100,5 +100,34 @@ auth.authenticate(url, token);
# 服务端认证
## 初始化
服务端初始化的入口函数类为AuthenticationFilter 可以在web启动的时候将当前filter配置为AuthenticationFilter。用来实现服务端认证功能。
其中函数init为filter的初始化函数主要作用是加载authHandler以及其他参数。在加载完authHandler之后会调用authHandler的init函数。
用来初始化authHandler。KerberosAuthenticationHandler就是一种authHandler。在初始化的时候会加载keytab和principal等信息。
并且初试化gssManager。
## 认证
认证的入口函数filter函数。对于大部分的authHandler最终认证都是调用authHandler的authenticate函数。针对KerberosAuthenticationHandler来讲。
在需要认证的时候返回401如下代码
```java
response.setHeader(WWW_AUTHENTICATE, KerberosAuthenticator.NEGOTIATE);
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
```
通过下面代码获取客户端Token。客户端的Token对应的keytab必须包含HTTP/*
```java
authorization = authorization.substring(KerberosAuthenticator.NEGOTIATE.length()).trim();
final Base64 base64 = new Base64(0);
final byte[] clientToken = base64.decode(authorization);
```
在与客户端的认证的过程中可能会需要多次交换token参考客户端流程如果是在交互过程中http请求的返回码是401。如果认证成功状态码则是200.