0

サービス内の識別情報は、データベースに格納されたトークンに基づいています。これは、ユーザ名とパスワードでログインしてクライアントが取得します。トークンベースの認証サーバー要求/応答の設計

リソースが要求されるたびに、トークンを検証し、そのリソースにアクセスする権限があるかどうかを判断します。

私たちのサービスは別々に配備され、HTTP経由で認証サーバーにアクセスできます。

要求を承認する際のベストプラクティス/一般的な方法は何ですか?

私は役割にトークンを渡すことを考えてと認証サーバにトークン検証要求にユーザーの許可を要求された、要求された権限と役割

でトークンを送信します。

{ 
token: 'xyz', 
role: 'ROLE_ADMIN', 
permission: 'SAVE_USER' 
} 

成功した場合は200、無効なトークンの場合は401、許可を使用する権限がない場合は403で応答します。

を念頭に置い

別のアプローチは、認証サーバにトークン検証要求にトークンにだけトークンを送信して認証要求にのみトークンを送信します。

{ 
token: 'xyz' 
} 

し、すべての権限とロールをユーザに応じるがあります

{ 
roles: ['ROLE_ADMIN', 'ROLE_USER'], 
permissions: ['SAVE_USER', 'DELETE_USER', 'SHOW_USER'] 
} 

より賢明であるこれらのどれ? 他に/パターンのアプローチがありますか?

+0

Spring MVCを使用している場合は、Spring OAuthを使用する方が良いと思います。実際の情報がデータベースに格納されている間は、ランダムなuuid(トークンとして)を送信するだけで、トークンベースの認証を処理しています。したがって、そのトークンを使用してリソースにアクセスしようとすると、springはそのトークンに対して役割/権限をチェックし、それに応じてユーザーを検証します。 – Afridi

+0

@Afridi私は現在OAuthを使用していません。 OAuth以外の認証/承認にSpring OAuthを使用することをお勧めしますか? – froi

答えて

0

"サービス"について言えば、サービスが要求する前に何ができるかを知っている可能性が最も高いサービスを意味します。

たとえば、リクエストが到着する前にユーザーがクリックできるボタンを強調表示することができます。

だから、私は2番目のアプローチがうまくいくと思います。そして、要求がサーバーに渡されている間、一種の最初のアプローチが実行されます。ユーザーは何かを削除したいだけで十分なアクセス権がないので、403を取得します。

セキュリティについては、説明した方法で十分なチェックがあります。最初の1つは、ユーザーが何らかのアクションを求めたときに実行される前にチェックされているため、これを実行する必要があります。

+0

これを確認するだけで、サービスに対するリクエストを承認する通常の方法ですか? – froi

+0

@froiあなたはどちらを意味していますか?リクエストごとにトークンを送信しますか?はい、そうです。多くの有名なサービスがそれを使用します。 – MTP1376

関連する問題