Verwenden Sie die Active Directory-Authentifizierung in Spring Boot OAuth2 Genehmigung Server

Ich versuche es einrichten eines proof-of-concept mit Spring Boot und OAuth2. Ich habe einige Projekt sehr ähnlich denen, die hier beschrieben werden:

https://spring.io/guides/tutorials/spring-boot-oauth2/

und hier: https://spring.io/guides/tutorials/spring-security-and-angular-js/

Der Hauptunterschied bei mir ist, ich habe alle AngularJS-Zeug.

Habe ich die folgenden Dienste:

  • Authorization server
  • Ressourcen-server (als geschützte OAuth2-client)
  • UI-server (als geschützte OAuth2-client)

Alles, was ich will, geschehen ist dies:

  1. Trifft den UI-server
  2. Umgeleitet auth-server und erhalten Sie zur Eingabe der Anmeldeinformationen aufgefordert
  3. UI-server dann Holen, text von Ressourcen-server, und zeigen Sie Sie

Kann ich das alles gut funktioniert mit Basic-Authentifizierung auf dem auth-server. Aber ich möchte in der Lage sein zu ersetzen, die basic-Authentifizierung mit dem Active Directory.

Habe ich ein paar andere Spring-Boot-Projekte, die tun können, die AD-Authentifizierung und-es funktioniert, jedoch wenn ich versuchen und legen Sie es in diese Dinge schief gehen. Ich denke, dass es mit der Sicherheit zu tun um die auth-server-Endpunkte, aber ich bin mir nicht sicher, was.

Auch, es ist mir nicht klar, welche Endgeräte sollten geschützt werden, welche Protokoll (OAuth2 v. Basic) in einer Produktionsumgebung? Die docs empfehlen einige Endpunkte sollten gesichert werden, mit Basic. Sollten alle 'OAuth2 Kunden" irgendwie gehören diese Anmeldeinformationen in Ihren Anträgen?

Hier mein auth-server-Anwendung (mit bits für Active Directory Hinzugefügt):

@EnableResourceServer
@EnableAuthorizationServer
@SpringBootApplication
@RestController
public class AuthServerLdapApplication {

public static void main(String[] args) {
    SpringApplication.run(AuthServerLdapApplication.class, args);
}

@RequestMapping("/user")
public Principal user(Principal user) {
    return user;
}

@Order(ManagementServerProperties.ACCESS_OVERRIDE_ORDER)
@Configuration
protected static class ActiveDirectoryConfig extends WebSecurityConfigurerAdapter {

    @Value("${activedirectory.url}")
    private String activeDirectoryUrl;

    @Value("${activedirectory.domain}")
    private String getActiveDirectoryDomain;

    @Autowired private AuthenticationManager authenticationManager;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider(getActiveDirectoryDomain,
                activeDirectoryUrl);
        provider.setConvertSubErrorCodesToExceptions(true);
        provider.setUseAuthenticationRequestCredentials(true);

        auth.authenticationProvider(provider);
        auth.parentAuthenticationManager(authenticationManager);
    }
}

}

Im Grunde das, was dann passiert, ist, dass ich bekomme, wenn ich auf den UI-server:

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

Wenn ich diesen gegen den authorization server:

curl -v http://localhost:9004/uaa/login
*   Trying ::1...
* Connected to localhost (::1) port 9004 (#0)
> GET /uaa/login HTTP/1.1
> Host: localhost:9004
> User-Agent: curl/7.44.0
> Accept: */*
>
< HTTP/1.1 401 Unauthorized
< Server: Apache-Coyote/1.1
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: 0
< X-Frame-Options: DENY
< Cache-Control: no-store
< Pragma: no-cache
< WWW-Authenticate: Bearer realm="null", error="unauthorized",    error_description="Full authentication is required to access this resource"
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Tue, 01 Dec 2015 12:38:53 GMT
<
{"error":"unauthorized","error_description":"Full authentication is required to access this resource"}* Connection #0 to host localhost left intact

Es sieht aus wie die login-Endpunkt erwartet nun ein bearer-token? Ich bin mir nicht sicher, wie das nun gehen...

Jede Hilfe/Ratschlag dankbar...

InformationsquelleAutor Tim Webster | 2015-12-01
Schreibe einen Kommentar