REST APIの保護が広くコメントされているトピックであることは知っていますが、自分の基準を満たす小さなプロトタイプを作成できません(そして、これらの基準が現実的であることを確認する必要があります)。リソースを保護する方法やSpringセキュリティをどのように使用するかについては、非常に多くのオプションがあります。自分のニーズが現実的かどうかを明確にする必要があります。
私の要件
- トークンベースのオーセンティケーター-ユーザーはその資格情報を提供し、一意で時間制限のあるアクセストークンを取得します。トークンの作成、有効性の確認、有効期限を自分の実装で管理したいと思います。
- 一部のRESTリソースは公開されます-認証する必要はまったくありません、
- 一部のリソースには、管理者権限を持つユーザーのみがアクセスできます。
- 他のリソースは、すべてのユーザーの承認後にアクセスできるようになります。
- 基本認証を使いたくない
- Javaコード構成(XMLではない)
現在の状態
私のRESTAPIは非常にうまく機能しますが、今度はそれを保護する必要があります。解決策を探していたときに、javax.servlet.Filter
フィルターを作成しました。
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
String accessToken = request.getHeader(AUTHORIZATION_TOKEN);
Account account = accountDao.find(accessToken);
if (account == null) {
throw new UnauthorizedException();
}
chain.doFilter(req, res);
}
しかし、Springjavax.servlet.filters
を介した例外処理に問題があるため、このソリューションは必要に応じて機能しません。@ControllerAdvice
servlet dispatcher
必要なもの
これらの基準が現実的であるかどうかを知り、助けが得られるかどうか、SpringSecurityでRESTAPIの保護を開始する方法を知りたいです。多くのチュートリアル(Spring Data REST + Spring Securityなど)を読みましたが、すべて非常に基本的な構成で機能します。資格情報を持つユーザーは構成のメモリに保存されるため、DBMSを使用して独自のオーセンティケーターを作成する必要があります。
始め方のアイデアを教えてください。