2017-12-04 23 views
0

私はSpringブートアプリケーションでJWTベースの認証を実装しています。ユーザーの銀行口座情報を含むAccountsテーブルがあります。ここで、ユーザーはアカウント番号を使用してサインインし、そのテーブルから固定します。問題はログイン後、JWTによって割り当てられたトークンで何かにアクセスできることです。他人のアカウント情報を変更することさえできます。トークンが作成されたユーザーだけにアクセスを制限するにはどうすればよいですか?JWT Springユーザーベースのアクセス

すべてのユーザーは、そのユーザーのみに関連付けられた情報にアクセスできる必要があります。したがって、rolesの作成はオプションではありません。 JWTはそのような機能を提供していますか、それとも手動でトークンをチェックする必要がありますか?私はトークンを解析し、それからアカウント番号を取り出し、コントローラメソッドで渡されたアカウント番号と比較することができますが、これはすべてのコントローラメソッドを変更する必要があるため、きちんとした解決策のようには見えません。

答えて

2

あなたの場合のセキュリティはビジネスロジックに依存するので、Authプロバイダ側でそのような検証を実行する方法はないと思います。

あなたができることは、AOPのSpringの助けを借りて非常にエレガントに実装することです。あなたは、あなたも、セキュリティリゾルバメソッドにJWTトークンを渡し、カスタムチェックを実装することができ、カスタムsecuriryリゾルバ

@PreAuthorize("@securityResolver.isOwner(#userId)") 
void changeAccount(UUID userId, Request body); 

@Component("securityResolver") 
public class CustomSecurityResolver { 

    public boolean isOwner(final String userId) { 
     //TODO business check here 
    } 

} 

で春method securityを使用することができます。この場合、サービスのビジネスロジックの変更を避けることができ、カスタムリゾルバでアノテーションを追加するだけです。

私は常にカスタムメソッドセキュリティの助けを借りてuser could only change its own infoまたはtenant isolationのようなチェックを実装しました

関連する問題