2017-03-09 10 views
0

私はangularjsとWeb APIを使用してSPAアプリケーションを開発しています。私は、API上のリソースのユーザー権限を設定する作業をしています。RESTfulサービスのアクセス許可の管理

apiはRESTfulなサービスなので、私はアクセス許可を保存/取得するのがベストプラクティスではないと思います。自分のアプリケーションの権限は、ユーザが属している別の企業に対して異なる権限を持つため、やや頻繁に変更される可能性があります。ユーザーは、アプリケーションで即座に会社を変更することができます。

私は現在解決している方法は、ユーザーがログインすると、アプリケーションは、すべての企業のユーザーが持っているすべてのアクセス許可のクレームを格納します。クレームは、権限名と企業IDを連結して格納されます。それから私は許可名を受け入れる属性を持っています。次に、その名前をアプリで選択した会社IDと連結し、それがクレームに存在するかどうかを確認します。そうであれば、彼らはアクセス権を持っています。

私が見る別の選択肢は、関連するユーザー情報のみをクレーム(ユーザーID、名前)に保存することです。次に、ロールや権限が必要になるたびに検索を行います。ここで欠点は、私はほとんどすべてのAPIリクエストでその情報が必要なので、多くのトラフィックがあることです。また、私は認証とリソースサーバーを分離しているので、単純な検索ではありません。データを取得するにはhttpを経由する必要があります。

これは私の唯一のオプションですか、これを処理する良い方法がありますか?

答えて

0

この問題を解決するには、ベアラトークンを使用します。ベアラトークンは基本的に暗号化されたJSON文字列であり、ユーザーのすべての要求を含むことができます。あなたのケースでは、会社/許可の組み合わせごとに別々の請求を行うことをお勧めします。

ベアラトークンがサーバー上に作成され、使用するサーバーテクノロジ/フレームワークによって、ベアラトークンが生成されます。

お客様のSPAは、リクエストごとにベアラトークンを送信します(これを行うには、$ HttpInterceptorサービスをご覧ください)。サーバーでは、サービスがトークンを復号化し、そのトークンのクレーム情報を使用して、ユーザーに特定のエンドポイントに対するアクセス許可があるかどうかを確認します。

+0

投稿にバイロンさんに感謝します。私は、ベアラのトークンを使用してクレームに対するアクセス許可が保存されていることを述べたはずです。私が行ったルートをお勧めします。 –

関連する問題