Springセキュリティ認証プロバイダ

1概要

このチュートリアルでは、シンプルな UserDetailsS​​ervice を使用して、標準のシナリオと比較して柔軟性を高めるためにSpring Securityで認証プロバイダを設定する方法を説明します。

2認証プロバイダ

Spring Securityは、認証を実行するためのさまざまなオプションを提供します - すべて簡単な契約に従って - Authentication 要求は AuthenticationProvider によって処理され、完全な認証情報を持つ完全に認証されたオブジェクトが返されます。

標準で最も一般的な実装は DaoAuthenticationProvider です。これは、単純な読み取り専用ユーザーDAOからユーザーの詳細を取得する UserDetailsS​​ervice です。このUser Details Service は、完全なユーザーエンティティを取得するためにユーザー名 にのみアクセスできます。多数のシナリオでは、これで十分です。

認証プロセスを実行するには、さらに多くのカスタムシナリオで、完全な Authentication 要求にアクセスする必要があります。]) - ** 認証要求からの username password の両方が必要になります。

これらのより高度なシナリオでは、カスタム認証プロバイダを定義する必要があります。

@Component
public class CustomAuthenticationProvider
  implements AuthenticationProvider {

    @Override
    public Authentication authenticate(Authentication authentication)
      throws AuthenticationException {

        String name = authentication.getName();
        String password = authentication.getCredentials().toString();

        if (shouldAuthenticateAgainstThirdPartySystem()) {

           //use the credentials
           //and authenticate against the third-party system
            return new UsernamePasswordAuthenticationToken(
              name, password, new ArrayList<>());
        } else {
            return null;
        }
    }

    @Override
    public boolean supports(Class<?> authentication) {
        return authentication.equals(
          UsernamePasswordAuthenticationToken.class);
    }
}

戻された Authentication オブジェクトに設定された許可された権限が空であることに注意してください - これは権限がもちろんアプリケーション特有であるためです。

3認証プロバイダを登録する

認証プロバイダが定義されたので、利用可能なネームスペースサポートを使用して、XMLセキュリティコンフィグレーションでそれを指定する必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans
  xmlns="http://www.springframework.org/schema/security"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:beans="http://www.springframework.org/schema/beans"
  xsi:schemaLocation="
    http://www.springframework.org/schema/security
    http://www.springframework.org/schema/security/spring-security-4.0.xsd
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">

    <http use-expressions="true">
        <intercept-url pattern="/** ** " access="isAuthenticated()"/>
        <http-basic/>
    </http>

    <authentication-manager>
        <authentication-provider
          ref="customAuthenticationProvider"/>
    </authentication-manager>

</beans:beans>

4 Javaの設定

次に、対応するJava設定を見てみましょう。

@Configuration
@EnableWebSecurity
@ComponentScan("org.baeldung.security")
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private CustomAuthenticationProvider authProvider;

    @Override
    protected void configure(
      AuthenticationManagerBuilder auth) throws Exception {

        auth.authenticationProvider(authProvider);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().authenticated()
            .and()
            .httpBasic();
    }
}

5認証を行う

クライアントから認証を要求することは基本的にバックエンドのこのカスタム認証プロバイダの有無にかかわらず同じです - 私達は認証された要求を送るために簡単な curl コマンドを使うことができます:

curl --header "Accept:application/json" -i --user user1:user1Pass
    http://localhost:8080/spring-security-custom/api/foo/1

この例では、基本認証を使用してREST APIを保護しています。

そして、私たちはサーバーから予想される200 OKを取り戻します。

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=B8F0EFA81B78DE968088EBB9AFD85A60; Path=/spring-security-custom/; HttpOnly
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Sun, 02 Jun 2013 17:50:40 GMT

6. 結論

この記事では、Spring Security用のカスタム認証プロバイダーの例について説明しました。

このチュートリアルの 完全な実装 はhttps://github.com/eugenp/tutorials/tree/master/spring-security-rest-custom[GitHubプロジェクト]にあります - これはMavenベースのプロジェクトなので、インポートしてそのまま実行するのは簡単なはずです。

前の投稿:Javaで円の面積を計算する
次の投稿:Springマスタークラスのプレゼント付きREST