接入 Hydra 授权、客户端管理与统一注销

This commit is contained in:
2026-09-28 12:30:06 +00:00
parent 45994e3919
commit 62b6e9db40
37 changed files with 1700 additions and 23 deletions
@@ -0,0 +1,34 @@
package top.ddupan.iam.login.configuration;
import java.util.stream.Collectors;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import top.ddupan.iam.login.authentication.domain.User;
import top.ddupan.iam.login.authentication.infrastructure.webauthn.MfaPolicy;
import top.ddupan.iam.login.authorization.application.AuthorizeApplication;
import top.ddupan.iam.login.authorization.application.AuthorizationPolicy;
import top.ddupan.iam.login.authorization.application.port.HydraGateway;
import top.ddupan.iam.login.authorization.infrastructure.hydra.*;
@Configuration(proxyBeanMethods = false)
@ConditionalOnProperty(prefix = "iam.hydra", name = "enabled", havingValue = "true")
@EnableConfigurationProperties(HydraProperties.class)
@org.springframework.aot.hint.annotation.RegisterReflectionForBinding({HydraAdminClient.Request.class,
HydraLogoutClient.Response.class, HydraLogoutClient.LogoutClient.class, HydraAdminClient.Client.class, HydraAdminClient.Context.class, HydraAdminClient.Redirect.class})
class HydraConfiguration {
@Bean top.ddupan.iam.login.authorization.application.port.LogoutGateway logoutGateway(HydraProperties properties) {
return new HydraLogoutClient(properties);
}
@Bean HydraGateway hydraGateway(HydraProperties properties, MfaPolicy requiredMfa) {
return new HydraAdminClient(properties);
}
@Bean AuthorizationPolicy authorizationPolicy(HydraProperties properties) {
return new AuthorizationPolicy(properties.clients(), properties.subjects().stream().collect(Collectors.toMap(
binding -> new User.UserId(binding.authority(), binding.directoryId()), HydraProperties.SubjectBinding::subject)));
}
@Bean AuthorizeApplication authorizeApplication(AuthorizationPolicy policy, HydraGateway hydra) {
return new AuthorizeApplication(policy, hydra);
}
}