ユーザーを検索し、パスワードの付与を使用してoauth 2トークンを取得できるカスタムUserDetailsServiceを実装しました。このサービスは、JPA userRepositoryを使用してユーザーを検索することを示します。userRepositoryが不安定なuserDetailsServiceはユーザーを検索する必要があります
これは、すべてのユーザーとパスワードをすべての認証済みユーザーに公開するための/ usersエンドポイントが公開されていることを除いて、すべて機能します。理想的には、このエンドポイントを使用できないようにしたいと思いますが、管理者ロールでpreAuthorizeを設定すると、ログイントークンを取得しようとしている間にすべてのユーザーが拒否されるため、これも機能しません。どのように人々はこの問題を回避するのですか?リソースサーバーにマッチャーを追加して管理ユーザーのみを許可することができますが、これはうまくいくと思われますが、エンドポイントを使用したくない場合、UserDetailsServiceを使用してアクセストークンを取得することができます。
皆さんのご意見は大変ありがとうございます。
//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);
}
}
は、これは私が探していたものです、ありがとうございました。 認証されたユーザーが電子メール、プロフィール情報、ユーザー名など自分のユーザー情報にアクセスできるようにするにはどうすればよいでしょうか?/user/authenticateUserなどがありますが、/ GET/usersなどの他のエンドポイントはありません。新しいコントローラを作成するのが最善でしょうか?/ユーザー情報/はその情報を引き出すだけですか? ありがとうございました – Richard
私は別々のエンドポイントを作成し、内部使用のためにUserdetailsエンドポイントを残しました。この新しいエンドポイントでは、ユーザーを特定して情報を取得する必要があります。 – JohanB