Я внедряю OIDC в моем приложении, не поддерживающем загрузку.Ниже приведена моя конфигурация для моего клиента OIDC, и я пытаюсь получить OAuth2AuthorizedClient от OAuth2AuthorizedClientService, я получаю нулевое значение.По сути, OAuth2AuthorizedClientService не регистрирует принципала клиента (authorClient).Я получал перенаправление на страницу входа okta (auth Server) и перенаправлялся на метод моего контроллера после аутентификации с помощью okta (auth Server)…
@Configuration
@EnableWebSecurity
@EnableOAuth2Client
public class ClientSecurityConfigurer extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/index/4_0/**")
.authenticated()
.antMatchers("/okta_login")
.permitAll()
.anyRequest()
.authenticated()
.and()
.oauth2Login()
.loginPage("/okta_login")
.clientRegistrationRepository(oktaRegistrationRepository())
.authorizedClientService(authorizedClientService());
}
@Bean
public OAuth2AuthorizedClientService authorizedClientService() {
return new InMemoryOAuth2AuthorizedClientService(oktaRegistrationRepository());
}
@Bean
public ClientRegistrationRepository oktaRegistrationRepository() {
return new InMemoryClientRegistrationRepository(this.oktaClientRegistration());
}
private ClientRegistration oktaClientRegistration() {
return ClientRegistration.withRegistrationId("okta").clientId("client id *********")
.clientSecret("client secret ********")
.clientAuthenticationMethod(ClientAuthenticationMethod.BASIC)
.authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
.redirectUriTemplate("http://localhost:9088/myApp/login/oauth2/code/okta")
.scope("openid", "profile", "email", "address", "phone")
.authorizationUri("https://myorg.oktapreview.com/oauth2/default/v1/authorize")
.tokenUri("https://myorg.oktapreview.com/oauth2/default/v1/token")
.userInfoUri("https://myorg.oktapreview.com/oauth2/default/v1/userinfo")
.userNameAttributeName(IdTokenClaimNames.SUB)
.jwkSetUri("https://myorg.oktapreview.com/oauth2/default/v1/keys").clientName("Okta")
.build();
}
}
инициализатор:
public class ClientSecurityInitializer extends AbstractSecurityWebApplicationInitializer {
public ClientSecurityInitializer() {
super(ClientSecurityConfigurer.class);
}
}
пользовательский входстраница:
@Controller
public class LoginController {
@RequestMapping(value="/okta_login")
public String oktaLogin(){
return "redirect:/oauth2/authorization/okta";
}
}
контроллер моего приложения:
@Controller
@RequestMapping("/index/4_0")
public class ClientController_4_0 {
@Autowired
private OAuth2AuthorizedClientService authorizedClientService;
@RequestMapping(value = "/client", method = RequestMethod.GET)
private String getIndex(Model model, HttpServletRequest req, OAuth2AuthenticationToken authentication) {
OAuth2AuthorizedClient authorizedClient = this.getAuthorizedClient(authentication);
OAuth2AccessToken token = (OAuth2AccessToken) authorizedClient.getAccessToken();
String tokenValue = token.getValue();
return "v4_0/client";
}
private OAuth2AuthorizedClient getAuthorizedClient(OAuth2AuthenticationToken authentication) {
return this.authorizedClientService.loadAuthorizedClient(
authentication.getAuthorizedClientRegistrationId(), authentication.getName());
}
}
обнуление при вызове
OAuth2AuthorizedClient authorizedClient = this.getAuthorizedClient(authentication);
Я автоматически подключил OAuth2AuthorizedClientService, где auhtorizedClients были нулевыми, ноclientRegistrationRepository загружается, так как я загрузил его из конфигурации ... думаю, после проверки подлинности клиентский клиент не загружается как authorClients ...
не уверен, где я делаю неправильно ... любое предложение будет очень признательно.