2012-11-02 5 views
6

要求内でAuthorizationヘッダーを受信して​​いる他のパブリックサービスによって内部的に照会される承認サービスを設計しています。REST - 許可の確認に使用する動詞

このサービスは認証(公開鍵(user_id)と秘密鍵のペア)を処理し、そのタスクは秘密鍵を知る唯一のサービスである署名(HMAC)を再生成することです。私はこれをサーバーリソースとして識別します。それから私は、ユーザーのない無許可の資源が存在しないと考えたので、私は、このベースでURI終わった:

/user/:user_id/authorization 

私は、新しいユーザーが作成されたときに作成し、承認を処理するためにCRUD操作を設計した、更新要求されるたびに、ユーザーが削除されたときに読み取りと削除を行います。

注:Userエンティティは別のサービスによって処理されます。私はこのURIを使用して公開鍵を論理的に渡します(ユーザと厳密に関連しているため)。

他のサービスからこのサービスにどのように問い合わせて、「ねえ、この鍵は正しいのですか?署名を再生成するために必要なすべてのデータをこのリクエストとともに渡します。

GET /user/:user_id/authorization?signature=SOMETHING&data=JSON-DATA-TO-REGENERATE-KEY 

しかし、おそらく、我々はまた、作成されるようにそれを見ることができます:

は、だから私は必要なものを私のような何かを取り払わまし

安らかな方法で権限を確認する方法です新しい認証リソース(何も返されない場合でも、トークンシステムではありません)は、この目的のためにPUTまたはPOSTをより適切に行います。

あなたの見解は何ですか?このような状況に対処する正しいアプローチは何ですか?

+0

なぜあなたは車輪を再発明していますか?現在のスキームはあなたのニーズに合っていませんか?基本、ダイジェストMD5、CERT、SPNEGO? –

+0

私はあなたが私が求めていたことを理解したとは思わない。私はすでにHMACを生成するためにSHA1を使用しています。私は、このシグネチャを認証サービスに送信して(そしてブール応答を得る)安らかな方法について尋ねています。サービスがHMACを計算できるようにデータが送信されます。 –

+0

私はS3メカニズムの後にこのシステムを設計しています。なぜなら、標準のどれも私のニーズに適さないからです。 –

答えて

0

このサービスは、認証(公開鍵(USER_ID)のペアと秘密鍵)

を扱いますが、秘密鍵、サーバー側を格納していますか?同じサービスで認証と認証を処理していますか?

私は個人的にWebIDのようなアーキテクチャを好みます。参照:

+0

はい、あります。秘密鍵は、このサービスによってのみアクセス可能なredisデータベース内に格納されます。次に、このサービスコンシューマである他のサービスからの要求が、HMAC署名とHMAC署名を再生成するために必要なデータを渡すことを期待しています...これは、ユーザー以外の秘密鍵を知る唯一のサービスです。私はあなたのリンクを読んでいますが、感謝ですが、私はS3ソリューションのような承認を単純にしておきたいと思います。何らかの認証が必要なすべてのサービス間で重複を避けるために、あるサービスがそれを処理するようにしたい。 –

+0

あなたのアーキテクチャでは、サービスとユーザーの両方が秘密鍵を知っている必要があるという事実に戸惑います。これにより、非対称キーシステムの警告電球が点灯します。 あなたの質問に答える前にこのデザインの選択を再検討しなければならないと思うのですが、それは署名を再生成する必要があるからです。 –

+0

秘密鍵が与えられていないと、クライアントが署名を生成する方法を教えてください。もちろん、承認は集中管理されており、このシステムだけが鍵を知る予定です。他のすべてのサービスはそうではありません。 –

1

GET /ユーザー/:?のuser_id /承認署名= SOMETHING &データ= JSON-DATA-TO-REGENERATE-KEY

GETメソッドが 'safe'であることを忘れないでください。 「検索以外の行動を取ることの意義がある」べきではない。つまり、クライアントは「副作用を要求すべきではありません」。

+0

私はこの要求を副作用が必要であると考えるべきですか? Authorizationヘッダーが正しいかどうかを確認する必要があります。サービスが200 OKで応答する必要がある場合は、OKです。どうしますか? –

1

個人的には、セッション/ユーザー/それ以外のPOST(それはおそらく)であるはずの初期認証(ログイン)を取得すると何か新しいものが作成されると思います。

その後の承認確認リクエストはGETでなければなりません。それらは新規のものを作成せず、基本的に(応答コードを介して)ブール値を返して、承認ヘッダーが有効かどうかを示します。

+0

私はセッションを作成しません、要求が受け取られるたびに私はHMACが有効かどうかをチェックします。興味のあるサービスに直接リクエストを行い、HMACシグネチャを作成します。それは、HMACシグネチャを計算するために別のサービスへの内部コールを作成するために処理しているサービスになります。 。それでは、どうすればいいと思いますか? –

+0

私はセキュリティ/認可の専門家ではありません。私はどの動詞を使うべきかという質問に答えるだけでした。私が理解する限り、通常の流れは、認証に成功すると、次の要求に追加するセキュリティトークンを取得することです。そのトークンは、時間および/または要求数によって、有効性が制限されます。 –

関連する問題