diff --git a/src/main/java/com/arrokoth/standalone/authorization/common/util/JwtUtils.java b/src/main/java/com/arrokoth/standalone/authorization/common/util/JwtUtils.java index bfe3b04..2cf3452 100644 --- a/src/main/java/com/arrokoth/standalone/authorization/common/util/JwtUtils.java +++ b/src/main/java/com/arrokoth/standalone/authorization/common/util/JwtUtils.java @@ -1,6 +1,6 @@ package com.arrokoth.standalone.authorization.common.util; -import com.arrokoth.standalone.authorization.common.exception.JwtException; +import com.arrokoth.standalone.authorization.exception.JwtException; import com.nimbusds.jose.JOSEException; import com.nimbusds.jose.JWSAlgorithm; import com.nimbusds.jose.JWSHeader; diff --git a/src/main/java/com/arrokoth/standalone/authorization/config/SecurityWebAutoConfigurer.java b/src/main/java/com/arrokoth/standalone/authorization/config/SecurityWebAutoConfigurer.java index dc359c4..c4823d9 100644 --- a/src/main/java/com/arrokoth/standalone/authorization/config/SecurityWebAutoConfigurer.java +++ b/src/main/java/com/arrokoth/standalone/authorization/config/SecurityWebAutoConfigurer.java @@ -27,6 +27,7 @@ public class SecurityWebAutoConfigurer { private final SecurityWebProperties securityWebProperties; private final SessionRegistry sessionRegistry; private final JwtRequestFilter jwtRequestFilter; +// private final LoginFilter loginFilter; private final AuthenticationSuccessHandler sampleAuthenticationSuccessHandler; private final AuthenticationFailureHandler sampleAuthenticationFailureHandler; @@ -63,6 +64,7 @@ public class SecurityWebAutoConfigurer { private void configureJwtAuthentication(HttpSecurity http) { http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class); +// http.addFilterAt(loginFilter, UsernamePasswordAuthenticationFilter.class); } private void configureFormLogin(HttpSecurity http) throws Exception { diff --git a/src/main/java/com/arrokoth/standalone/authorization/controller/LoginController.java b/src/main/java/com/arrokoth/standalone/authorization/controller/LoginController.java index 0e0f9c0..52cf023 100644 --- a/src/main/java/com/arrokoth/standalone/authorization/controller/LoginController.java +++ b/src/main/java/com/arrokoth/standalone/authorization/controller/LoginController.java @@ -1,9 +1,9 @@ package com.arrokoth.standalone.authorization.controller; import com.arrokoth.standalone.authorization.common.basic.BasicModel; +import com.arrokoth.standalone.authorization.common.util.JwtUtils; import com.arrokoth.standalone.authorization.properties.SecurityWebProperties; import com.arrokoth.standalone.authorization.service.AuthorizationService; -import com.arrokoth.standalone.authorization.common.util.JwtUtils; import io.swagger.v3.oas.annotations.Operation; import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.Valid; diff --git a/src/main/java/com/arrokoth/standalone/authorization/common/exception/JwtException.java b/src/main/java/com/arrokoth/standalone/authorization/exception/JwtException.java similarity index 78% rename from src/main/java/com/arrokoth/standalone/authorization/common/exception/JwtException.java rename to src/main/java/com/arrokoth/standalone/authorization/exception/JwtException.java index 920886f..e7b8dbb 100644 --- a/src/main/java/com/arrokoth/standalone/authorization/common/exception/JwtException.java +++ b/src/main/java/com/arrokoth/standalone/authorization/exception/JwtException.java @@ -1,4 +1,4 @@ -package com.arrokoth.standalone.authorization.common.exception; +package com.arrokoth.standalone.authorization.exception; diff --git a/src/main/java/com/arrokoth/standalone/authorization/filter/LoginFilter.java b/src/main/java/com/arrokoth/standalone/authorization/filter/LoginFilter.java new file mode 100644 index 0000000..47d2678 --- /dev/null +++ b/src/main/java/com/arrokoth/standalone/authorization/filter/LoginFilter.java @@ -0,0 +1,85 @@ +//package com.arrokoth.standalone.authorization.filter; +// +//import com.arrokoth.framework.boot.graceful.response.RestResponseFactory; +//import com.arrokoth.framework.boot.rest.RestResponse; +//import com.arrokoth.standalone.authorization.common.basic.BasicModel; +//import com.arrokoth.standalone.authorization.service.AuthorizationService; +//import com.fasterxml.jackson.databind.ObjectMapper; +//import jakarta.servlet.FilterChain; +//import jakarta.servlet.http.HttpServletRequest; +//import jakarta.servlet.http.HttpServletResponse; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.security.authentication.AuthenticationManager; +//import org.springframework.security.authentication.AuthenticationServiceException; +//import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +//import org.springframework.security.core.Authentication; +//import org.springframework.security.core.session.SessionRegistry; +//import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +//import org.springframework.stereotype.Component; +// +//import java.io.IOException; +//import java.io.PrintWriter; +// +//@Component +//public class LoginFilter extends UsernamePasswordAuthenticationFilter { +// +// @Autowired +// private SessionRegistry sessionRegistry; +// +// +// AuthorizationService authorizationService; +// +// @Autowired +// RestResponseFactory restResponseFactory; +// +// @Autowired +// public LoginFilter(AuthenticationManager authenticationManager,AuthorizationService authorizationService) { +// this.authorizationService =authorizationService; +// this.setAuthenticationManager(authenticationManager); +// this.setFilterProcessesUrl("/user/login"); // 设置登录URL +// } +// @Override +// public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) { +// if (!request.getMethod().equals("POST")) { +// throw new AuthenticationServiceException("Authentication method not supported: " + request.getMethod()); +// } +// try { +// // 解析请求体中的 JSON +// ObjectMapper mapper = new ObjectMapper(); +// BasicModel.LoginRequest loginRequest = mapper.readValue(request.getInputStream(), BasicModel.LoginRequest.class); +// // 创建认证 Token +// UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(loginRequest.username(), loginRequest.password()); +// return getAuthenticationManager().authenticate(authRequest); +// } catch (IOException e) { +// throw new RuntimeException("Could not read request", e); +// } +// } +// +// +// @Override +// protected void successfulAuthentication(HttpServletRequest request, +// HttpServletResponse response, +// FilterChain chain, +// Authentication authentication) throws IOException { +// ObjectMapper mapper = new ObjectMapper(); +// +// +// Object principal = authentication.getPrincipal(); +// +// +// BasicModel.LoginRequest loginRequest = new BasicModel.LoginRequest("admin",""); +// +// +// // 登录成功:生成 Token 并返回 +// BasicModel.Token token = authorizationService.login(loginRequest); +// RestResponse restResponse = restResponseFactory.newSuccessInstance(token); +// +// response.setContentType("application/json;charset=UTF-8"); +// PrintWriter out = response.getWriter(); +// String jsonResponse = mapper.writeValueAsString(restResponse); +// out.print(jsonResponse); +// out.flush(); +// } +// +// +//} \ No newline at end of file diff --git a/src/main/java/com/arrokoth/standalone/authorization/properties/SecurityWebProperties.java b/src/main/java/com/arrokoth/standalone/authorization/properties/SecurityWebProperties.java index 1dfd170..da76a9c 100644 --- a/src/main/java/com/arrokoth/standalone/authorization/properties/SecurityWebProperties.java +++ b/src/main/java/com/arrokoth/standalone/authorization/properties/SecurityWebProperties.java @@ -71,6 +71,7 @@ public class SecurityWebProperties { private static final List DEFAULT_PERMIT_URLS = Arrays.asList( AXIOS_LOGIN_PROCESSING_URL, DEFAULT_LOGIN_PROCESSING_URL, + "/favicon.*", "/login", "/logout", "/connect/logout", diff --git a/src/main/java/com/arrokoth/standalone/authorization/service/impl/AuthorizationServiceImpl.java b/src/main/java/com/arrokoth/standalone/authorization/service/impl/AuthorizationServiceImpl.java index b4ee36d..f516302 100644 --- a/src/main/java/com/arrokoth/standalone/authorization/service/impl/AuthorizationServiceImpl.java +++ b/src/main/java/com/arrokoth/standalone/authorization/service/impl/AuthorizationServiceImpl.java @@ -13,9 +13,10 @@ public class AuthorizationServiceImpl implements AuthorizationService { @Override public BasicModel.Token login(BasicModel.LoginRequest loginRequest) { - String accessToken = JwtUtils.createAccessToken(loginRequest.username()); - String refreshToken = JwtUtils.createRefreshToken(loginRequest.username()); + String username = loginRequest.username(); + String accessToken = JwtUtils.createAccessToken(username); + String refreshToken = JwtUtils.createRefreshToken(username); return new BasicModel.Token(accessToken, refreshToken, "Bearer", diff --git a/src/main/java/com/arrokoth/standalone/authorization/store/RegisteredClientRepositoryStore.java b/src/main/java/com/arrokoth/standalone/authorization/store/RegisteredClientRepositoryStore.java index ad03167..20538fc 100644 --- a/src/main/java/com/arrokoth/standalone/authorization/store/RegisteredClientRepositoryStore.java +++ b/src/main/java/com/arrokoth/standalone/authorization/store/RegisteredClientRepositoryStore.java @@ -99,7 +99,36 @@ public class RegisteredClientRepositoryStore { .build()) .build(); + RegisteredClient salaryClient = RegisteredClient.withId(UUID.randomUUID().toString()) + .clientId("salary-standalone-client") + .clientSecret(bCryptPasswordEncoder.encode("salary-secret")) + .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC) + .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE) + .authorizationGrantType(AuthorizationGrantType.REFRESH_TOKEN) + .authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS) + // 回调地址(授权码返回地址) + .redirectUris(uris -> uris.addAll( + List.of( - return new InMemoryRegisteredClientRepository(oidcClient,gatewayClient, certificateClient); + "http://127.0.0.1:9528/cash-admin/callback", + "https://www.yyds8848.com/cash-admin/callback", + + "http://127.0.0.1:8092/login/oauth2/code/messaging-client-oidc", + "http://127.0.0.1:9528/callback" + ) + )) + .postLogoutRedirectUri("http://127.0.0.1:8082/logged-out") + .scope(OidcScopes.OPENID) + .scope(OidcScopes.PROFILE) + .scope("salary.read") + .scope("salary.write") + .clientSettings(ClientSettings.builder().requireAuthorizationConsent(false).build()) + .tokenSettings(TokenSettings.builder() + .accessTokenTimeToLive(Duration.ofHours(1)) + .refreshTokenTimeToLive(Duration.ofHours(10)) + .build()) + .build(); + + return new InMemoryRegisteredClientRepository(oidcClient, gatewayClient, certificateClient, salaryClient); } } diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html index a7e83f8..e28a13d 100644 --- a/src/main/resources/templates/login.html +++ b/src/main/resources/templates/login.html @@ -46,12 +46,12 @@
- +
+ value="">