Spring OAuth2 / OIDC - OAuth2AuthorizedClientService не регистрирует принципала пользователя (authroizedClient) - PullRequest
0 голосов
/ 14 сентября 2018

Я внедряю 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 ...

не уверен, где я делаю неправильно ... любое предложение будет очень признательно.

1 Ответ

0 голосов
/ 17 сентября 2018

Я понял это ... проблема связана с моим классом SecurityInitializer.Поскольку мое приложение уже является приложением Spring (не весенней загрузки), мне не нужно загружать в него свой класс SecurityConfig.Поэтому мой класс инициализатора безопасности будет таким, как показано ниже ...

public class ClientSecurityInitializer extends AbstractSecurityWebApplicationInitializer {
}
...