Printemps de Démarrage de Sécurité OAuth2 avec le Formulaire de Connexion

Je suis La partie V de la mise en route avec le Printemps de Démarrage de Sécurité pour sécuriser mon Reposant microservices.

Le simple passage que j'ai l'intention de mettre en œuvre:-

  1. Si non authentifié, l'utilisateur est redirigé vers une page de connexion personnalisée
    dire "/login".
  2. Utilisateur fournit ses informations d'identification.
  3. Sur la réussite de l'authentification de l'utilisateur est redirigé vers la page d'accueil
    ('/home'). Je devrais être en mesure d'accéder à mon point de terminaison REST (derrière un
    Zuul Serveur Proxy) après le jeton d'accès dans la demande.

Le guide de mise en route dans le mentionné ci-dessus lien utilise l'Authentification Basique et mannequin configuré par l'utilisateur .propriétés ou .fichier yml.

C'est la façon dont j'ai essayé avec ma configuration:-

@Configuration
@EnableAuthorizationServer
public class OAuth2Config extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private AuthenticationManager authenticationManager;

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.authenticationManager(authenticationManager);
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory().withClient("acme").secret("acmesecret")
                .authorizedGrantTypes("authorization_code", "refresh_token", "password").scopes("openid")
                .accessTokenValiditySeconds(3600);
    }

    @Override
    public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
        oauthServer.tokenKeyAccess("isAnonymous()").checkTokenAccess("isAnonymous()")
                .allowFormAuthenticationForClients();
    }

}



@Configuration
@Import({ OptoSoftSecurityServiceConfig.class })
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService; //backed by MongoDB

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.httpBasic().disable().formLogin();//disabled basic auth and configured to use dafault Spring Security form login.
    }
}

Frapper le l'autorisation d'extrémité me redirige vers 'http://localhost:9999/uaa/login' avec le message d'erreur comme:-

<oauth>
<error_description>
Full authentication is required to access this resource
</error_description>
<error>unauthorized</error>
</oauth>

PROBLÈME

  1. Comment puis-je configurer le Serveur d'Autorisation pour l'utilisation UserDetailsService
    au lieu de statique de l'utilisateur et d'utiliser le Formulaire de Connexion au lieu de l'Authentification Basique.
  2. Comment puis-je configurer d'Approbation Automatique lors de l'utilisation de "authorization_code'
    comme le type de subvention?
  3. Est-il obligatoire pour /oauth/autoriser un point de terminaison d'être protégé par
    Basic Auth? Pourquoi " l'authentification est requise pour accéder à la
    /oauth/autoriser l'ordinateur d'extrémité. Je crois que nous ne savons pas qui est l'utilisateur
    avant ce point de terminaison. L'utilisateur ne peut être identifié, une fois qu'il a
    été authentifiés à l'aide des informations d'identification valides qui vient après la forme
    connexion.

OriginalL'auteur Kumar Sambhav | 2015-07-18