2013-04-28 5 views
13

私は基本的なサービス指向アーキテクチャーを模索しており、サービス全体でユーザー認証を最もうまく処理する方法を知りたいと思います。非常に簡単な例としてサービス指向アーキテクチャの集中認証

、我々は他の二つのサービスに声をかけブログのアプリがあるとは:

  1. ユーザー/ユーザーデータを格納し、アクセストークン
  2. Aの資格情報を交換するための認証サービス投稿データを管理するためのサービスを投稿する

アプリケーションのユーザが特定の投稿を削除しようとしており、「管理者」ロールを持つユーザだけが許可されているとします。

次の要求がなされる必要があるでしょう:

  • アプリ - >認証

    (トークンのいくつかの並べ替えを介した)現在のユーザーを認証します。トークンの有効期限が切れている場合はアプリがログインフォームにユーザーをリダイレクトすることができ、など

  • アプリ - >ポスト

    投稿を削除。

  • ポスト - >認証

    ポストが削除される前に、郵便サービスが要求しているユーザに権限があることを確認する必要があります。トークンを使用して現在のユーザーを認証し、そのユーザーが "管理者"ロールを持っていることを確認します。

これは非常に単純な例ですが、私は皆さんがサービスを通じて正式な方法を扱っているかどうか不思議です。要求を許可するために、各サービスが認証サービスとは別の呼び出しを行う必要があるようです。これは本当ですか?この種のSOAで認証を処理するためのより良い方法はありますか?

ありがとうございます!

答えて

6

identity providerを実装できます。ユーザーが認証/認証サービスで認証されると、彼女を識別するトークンを取得する必要があります。このトークンは、彼女(ロール/クレーム)を識別し、認証/認可サービスの秘密鍵で署名することができます。サービスがセキュリティトークンを取得し、信頼できる機関によって署名されている場合、サービスは再び認証/認可サービスに行く必要はありません。

システムのセキュリティ要件(ユーザーレベルなど)が高い場合は、綿密なクレームが必要な場合や、リクエストごとに認証システムにアクセスする必要があります。私はシステム上で一度働いていましたが、特定のタイプの情報がすべてのアクセスと他のタイプの承認にロールベースのセキュリティでOKでした。

+0

トークン自体にユーザーの役割が含まれていることをお勧めしますか? – scttnlsn

+1

セキュリティ要件によって異なります。トークンライフタイムの場合、承認の取り消しを処理しないで生きることができれば、それを使用することができます。あなたがそれぞれの要求に対して承認する必要があることに余裕がない場合。アイデンティティ・プロバイダとそれを使用するサービスが同じサーバーにデプロイされている場合、オーバーヘッドが妥当であることに注意してください。例えばOpenAMのポリシーエージェントhttps://wikis.forgerock.org/confluence/display/openam/Authentication+and+Authorization+Overview –

+0

お気軽にお問い合わせください...ありがとう! – scttnlsn

関連する問題