0

ユーザーを検索し、パスワードの付与を使用してoauth 2トークンを取得できるカスタムUserDetailsS​​erviceを実装しました。このサービスは、JPA userRepositoryを使用してユーザーを検索することを示します。userRepositoryが不安定なuserDetailsS​​erviceはユーザーを検索する必要があります

これは、すべてのユーザーとパスワードをすべての認証済みユーザーに公開するための/ usersエンドポイントが公開されていることを除いて、すべて機能します。理想的には、このエンドポイントを使用できないようにしたいと思いますが、管理者ロールでpreAuthorizeを設定すると、ログイントークンを取得しようとしている間にすべてのユーザーが拒否されるため、これも機能しません。どのように人々はこの問題を回避するのですか?リソースサーバーにマッチャーを追加して管理ユーザーのみを許可することができますが、これはうまくいくと思われますが、エンドポイントを使用したくない場合、UserDetailsS​​erviceを使用してアクセストークンを取得することができます。

皆さんのご意見は大変ありがとうございます。

//Example code: 
// Bad public facing endpoint returning all users and passwords 

public interface UserRepository extends JpaRepository<User, Long> { 
    User findOneByUsername(String username); 
} 

// Custom user details service used by oauth 2 to get access tokens 
// uses userRepo above 
@Service("userDetailsService") 
public class UserService implements UserDetailsService { 

    @Autowired 
    private UserRepository userRepository; 

    @Override 
    public UserDetails loadUserByUsername(String username) throws  UsernameNotFoundException { 
     return userRepository.findOneByUsername(username); 
    } 
} 

// class using user details service 
@Configuration 
@EnableAuthorizationServer 
public class OAuth2Config extends AuthorizationServerConfigurerAdapter { 

    @Qualifier("userDetailsService") 
    private UserDetailsService userDetailsService; 

    @Override 
    public void configure(AuthorizationServerEndpointsConfigurer configurer) throws Exception { 
     configurer.userDetailsService(userDetailsService); 
    } 


} 

答えて

0

私はあなたがスプリングデータを使用していると仮定しますか?その場合

、あなたはエンドポイントをエクスポートしない春を伝える必要があります:

@RepositoryRestResource(exported = false) 

https://docs.spring.io/spring-data/rest/docs/current/api/org/springframework/data/rest/core/annotation/RepositoryRestResource.html

+0

は、これは私が探していたものです、ありがとうございました。 認証されたユーザーが電子メール、プロフィール情報、ユーザー名など自分のユーザー情報にアクセスできるようにするにはどうすればよいでしょうか?/user/authenticateUserなどがありますが、/ GET/usersなどの他のエンドポイントはありません。新しいコントローラを作成するのが最善でしょうか?/ユーザー情報/はその情報を引き出すだけですか? ありがとうございました – Richard

+0

私は別々のエンドポイントを作成し、内部使用のためにUserdetailsエンドポイントを残しました。この新しいエンドポイントでは、ユーザーを特定して情報を取得する必要があります。 – JohanB

関連する問題