Spring Boot-フラグに応じてローカルDBまたはActive Directoryを介した認証

ビスケット:

少し前にSpring Bootアプリケーションを開発し、ローカルデータベースを使用してユーザー認証を行いました。

アプリケーションがどんどん使われるようになったので、会社のActive Directoryを介した認証も有効にしたいと思います。

ローカルユーザーテーブルにすべてのユーザーを保持して他のテーブルから参照できるようにしたいが、一部のユーザーのアクティブディレクトリに対してユーザー名とパスワードを確認します。ユーザーがActive Directoryユーザーであるかローカルユーザーであるかは、ユーザーテーブルに保持されます。

疑似コードでは、次のようになります。

if(user.isAdUser()) {
    checkCredentialsAgainstAD();
} else {
    checkCredentialsAgainstLocalDb();
}

現在の認証コードは次のようになります。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDAO userDao;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        /* http.authorizeRequests()... */
    }

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(new CustomUserDetailsService(userDao)).passwordEncoder(new BCryptPasswordEncoder());
    }
}

userDaoオーバーライドされたloadUserByUsername(String username)メソッドで、データベースからユーザー情報をロードします

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    User user = userDao.readUserByLogin(username, true);

    if(user == null){
        log.info(username + " not found");
        throw new UsernameNotFoundException(username + " not found");
    }

    User userObj = user.clone();
    userObj.password = null;

    return new CustomUserDetails(user.loginName, user.password, getAuthorities(user), userObj);
}

ActiveDirectoryLdapAuthenticationProviderこのようなものを追加できることはすでにわかりました

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.authenticationProvider(new ActiveDirectoryLdapAuthenticationProvider("DOMAIN", "ldap://example.com")).userDetailsService(new CustomUserDetailsService(userDao)).passwordEncoder(new BCryptPasswordEncoder());
})

しかし、それは常にActive Directoryを使用します。

使用する認証プロバイダーを具体的にどのように選択できますか?

Java Spring Securityの構成で推奨されている順序ですべてのプロバイダーをテストしたくありません-複数の認証プロバイダーですが、データベースから取得したフラグに応じて、正しいプロバイダーのみをテストします。

ケンチャン:

あなたの要件に基づいて、おそらく最も簡単な解決策はAuthenticationProviderDaoAuthenticationProviderとの両方を内部的にラップするカスタム作成することActiveDirectoryLdapAuthenticationProviderです。

このカスタムのみAuthenticationProviderが登録されます。認証中に、最初にユーザーをDBから取得して「認証モード」を決定し、さらに認証を委任するDaoAuthenticationProviderまたはActiveDirectoryLdapAuthenticationProviderそれに応じて委任します。

以下のようなものを自由に変更してください:

@Service
public class MyCustomAuthenticationProvider implements AuthenticationProvider{

        @Autowired
        private DaoAuthenticationProvider dbAuthProvider;

        @Autowired
        private ActiveDirectoryLdapAuthenticationProvider adAuthProvider;

        @Autowired
        UserDAO userDao;

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

            // Determine username
            String username = (authentication.getPrincipal() == null) ? "NONE_PROVIDED": authentication.getName();
            User user = userDao.getUserByName(username);
            if(user == null){
                throw new  AuthenticationException("Sorry. No this user.");
            }

            if(user.isAdUser()) {
                return adAuthProvider.authenticate(authentication);
            } else {
               return dbAuthProvider.authenticate(authentication);
            }

        }

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


}

しかし、注釈付き構成によってそれらを配線する方法は、フォローアップする必要がある別の話です.....

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Apache リバース プロキシを介した Spring Boot 証明書の認証

分類Dev

Spring Bootを使用したSpring Security:基本認証とJWTトークン認証を組み合わせる

分類Dev

Spring Bootは、antMatchersを使用して認証URLを動的にロードします

分類Dev

Spring-Bootを使用した同じURLでの異なる認証方法

分類Dev

Spring Boot2およびSpringSecurity5を使用した多要素認証

分類Dev

Spring Bootを介してTibcoトピックに接続中に認証が失敗する

分類Dev

Spring Bootには、スケジュールされたすべてのジョブを無効にするグローバルフラグがありますか?

分類Dev

Spring Boot Javaを介してローカルでアクセスすると、AWS Elastic Cache(Redis)が接続に失敗しました(jedis接続エラー)

分類Dev

RESTfulログインAPIを使用してSpring Bootアプリを認証する

分類Dev

Spring Boot + Spring Security:基本認証フォームを抑制する方法

分類Dev

Spring-Bootを通じてKSQL(kafka)を介して作成されたテーブルにアクセスする方法はありますか?

分類Dev

Spring Kafkaを使用したSpring Boot Rest API

分類Dev

Apache Camelを介したrabbitmqへのSpring boot 2接続

分類Dev

JSONを介したjava.lang.Booleanの送信(Spring Boot)

分類Dev

外部認証ソースを使用しているときに、Spring Bootで認証をモックする方法

分類Dev

Camunda Webapps(Spring-bootスタンドアロン)がDBまたはRestを介してTasklistを介して.bpmnを更新することは可能ですか?

分類Dev

@ValidandThymeleafを使用したSpring-Bootでの入力の検証

分類Dev

Spring Bootを使用して匿名URLで認証ヘッダーを受信する

分類Dev

Spring Boot REST API / Springセキュリティ:認証が失敗したときにカスタムメッセージを返す

分類Dev

Spring Boot REST API / Springセキュリティ:認証が失敗したときにカスタムメッセージを返す

分類Dev

Spring Boot REST API / Springセキュリティ:認証が失敗したときにカスタムメッセージを返す

分類Dev

Spring Boot 1.3 + OAuth:認証リクエストに失敗しました:BadCredentialsException:アクセストークンを取得できませんでした

分類Dev

Spring Boot:401を返す基本認証ですが、Postmanでは機能します

分類Dev

Spring Boot 2.0.0.M4は、application.ymlのhttp基本認証を壊します

分類Dev

Postmanを使用してHTTP-403 Forbidden Spring Boot基本認証を解決する方法

分類Dev

Kerberosを介したActive Directoryでの認証

分類Dev

ObjectMapper GET @RequestParamを介してマッピングされたSpring Boot Validate JSON

分類Dev

RestTemplateを使用したSpring 4.0.0基本認証

分類Dev

RestTemplateを使用したSpring Security認証

Related 関連記事

  1. 1

    Apache リバース プロキシを介した Spring Boot 証明書の認証

  2. 2

    Spring Bootを使用したSpring Security:基本認証とJWTトークン認証を組み合わせる

  3. 3

    Spring Bootは、antMatchersを使用して認証URLを動的にロードします

  4. 4

    Spring-Bootを使用した同じURLでの異なる認証方法

  5. 5

    Spring Boot2およびSpringSecurity5を使用した多要素認証

  6. 6

    Spring Bootを介してTibcoトピックに接続中に認証が失敗する

  7. 7

    Spring Bootには、スケジュールされたすべてのジョブを無効にするグローバルフラグがありますか?

  8. 8

    Spring Boot Javaを介してローカルでアクセスすると、AWS Elastic Cache(Redis)が接続に失敗しました(jedis接続エラー)

  9. 9

    RESTfulログインAPIを使用してSpring Bootアプリを認証する

  10. 10

    Spring Boot + Spring Security:基本認証フォームを抑制する方法

  11. 11

    Spring-Bootを通じてKSQL(kafka)を介して作成されたテーブルにアクセスする方法はありますか?

  12. 12

    Spring Kafkaを使用したSpring Boot Rest API

  13. 13

    Apache Camelを介したrabbitmqへのSpring boot 2接続

  14. 14

    JSONを介したjava.lang.Booleanの送信(Spring Boot)

  15. 15

    外部認証ソースを使用しているときに、Spring Bootで認証をモックする方法

  16. 16

    Camunda Webapps(Spring-bootスタンドアロン)がDBまたはRestを介してTasklistを介して.bpmnを更新することは可能ですか?

  17. 17

    @ValidandThymeleafを使用したSpring-Bootでの入力の検証

  18. 18

    Spring Bootを使用して匿名URLで認証ヘッダーを受信する

  19. 19

    Spring Boot REST API / Springセキュリティ:認証が失敗したときにカスタムメッセージを返す

  20. 20

    Spring Boot REST API / Springセキュリティ:認証が失敗したときにカスタムメッセージを返す

  21. 21

    Spring Boot REST API / Springセキュリティ:認証が失敗したときにカスタムメッセージを返す

  22. 22

    Spring Boot 1.3 + OAuth:認証リクエストに失敗しました:BadCredentialsException:アクセストークンを取得できませんでした

  23. 23

    Spring Boot:401を返す基本認証ですが、Postmanでは機能します

  24. 24

    Spring Boot 2.0.0.M4は、application.ymlのhttp基本認証を壊します

  25. 25

    Postmanを使用してHTTP-403 Forbidden Spring Boot基本認証を解決する方法

  26. 26

    Kerberosを介したActive Directoryでの認証

  27. 27

    ObjectMapper GET @RequestParamを介してマッピングされたSpring Boot Validate JSON

  28. 28

    RestTemplateを使用したSpring 4.0.0基本認証

  29. 29

    RestTemplateを使用したSpring Security認証

ホットタグ

アーカイブ