Spring Boot と OAuth2 を使用して概念実証をセットアップしようとしています。ここで概説したものと非常によく似たプロジェクトをいくつかセットアップしました。
https://spring.io/guides/tutorials/spring-boot-oauth2/
そしてここ:https://spring.io/guides/tutorials/spring-security-and-angular-js/
私のものとの主な違いは、AngularJS のものをすべて省略したことです。
次のサービスがあります。
- 認可サーバー
- リソース サーバー (保護された OAuth2 クライアントとして)
- UI サーバー (保護された OAuth2 クライアントとして)
私がしたいのはこれだけです:
- UI サーバーにアクセスする
- 認証サーバーにリダイレクトされ、資格情報の入力を求められます
- UI サーバーは、リソース サーバーからテキストを取得して表示します。
認証サーバーでの基本認証を使用して、これをすべて正常に機能させることができます。ただし、基本認証を Active Directory からの認証に置き換えられるようにしたいと考えています。
AD認証を実行できるSpring Bootプロジェクトが他にもいくつかあり、動作しますが、これにドロップしようとすると問題が発生します。認証サーバーのエンドポイント周辺のセキュリティに関係していると思いますが、何が原因かわかりません。
また、実稼働環境でどのエンドポイントをどのプロトコル (OAuth2 対 Basic) で保護する必要があるかは明確ではありません。ドキュメントでは、一部のエンドポイントを Basic で保護することを推奨しています。すべての「OAuth2 クライアント」は、何らかの形でこれらの資格情報をリクエストに含める必要がありますか?
これが私の認証サーバーアプリケーションです(Active Directoryのビットが追加されています):
@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);
}
}
}
基本的には、UI サーバーにアクセスすると次のようになります。
<oauth>
<error_description>
Full authentication is required to access this resource
</error_description>
<error>unauthorized</error>
</oauth>
認可サーバーに対してこれを行うと:
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
ログイン エンドポイントがベアラー トークンを期待しているように見えますか? 今はどう進めていいのかわからない…
ヘルプ/アドバイスをいただければ幸いです...