1

私は安らかなサービスと維持するエンティティの 1 つであるユーザー アカウントを設計しています。私は.NETでそれを行っており、メンバーシッププロバイダーを使用しています。

これが私が持っているものです:

/users/ GET - ユーザーのリストを返します

/users/ POST - 複数のユーザーを作成または更新できます (ユーザー オブジェクトのポスト配列)

ユーザーを更新または作成する場合、この POST は重要ではありません

問題: パスワードを変更するサービスを作成するにはどうすればよいですか? パスワードの変更は、ユーザーの更新手順とは別のものです。私は次のようなことを考えています:

/users/{userName}/password POST - ユーザーのパスワードを変更します。

しかし、ここで別のオブジェクトを渡す必要がありますか? (私はJSONを使用しています)

URL のレイアウト方法について何か提案はありますか? そして、本当に別のオブジェクトを作成する必要がありますか? MembershipProvider では、古いパスワードと新しいパスワードを変更する必要があります

4

2 に答える 2

1

問題は、パスワードをそれ自体がリソースと見なすかどうかということです。

ユーザー データベースでは、すべてのパスワード (ソルトおよびストレッチ) を独自のテーブルに格納しているため、パスワードを別のリソースとして簡単に提示できます。しかし、細かい制御ができないからといって、同じことができないというわけではありません - しかし、私はパスワードに GET を実装することは考えていません。プロトコルの一種。

残りのサービスは、そのデータを自由に表現できますが、基礎となる構造を実際には考慮していないため、あなたの場合に意味がある場合は、別のリソースとして自由に実行できると思います。

パスワードの変更に使用する uri をユーザー データに含めることができます。クライアントは、送信するデータのタイプを認識している必要があり (そのため、変更要求を処理するには専用のリソース タイプが必要です)、uri は POST 要求でトリガーされる必要があります。

于 2011-06-11T01:31:28.713 に答える
0

あなたの質問を理解できれば、URIレイアウト自体とどのように関連しているかについての提案が必要です。以下の提案は、特に誰かがパスワードを変更するために使用できるURIの設計に関連しています。

HTTPS経由で送信された場合でも、機密情報をURIに平文で含めないでください。その情報は、サーバー上のログファイルに書き込まれる可能性があり、さらに悪いことに、分析または監視ソフトウェアによって記録される可能性があります。機密情報が本文またはヘッダーの一部として送信されていることを確認してください。

RESTfullサービスでパスワードを変更するために独自のURIが必要になる理由を次に示します。

  1. ユーザーの詳細を更新するときにパスワードが誤って変更されるのを防ぎます。
  2. この方法が変更されるたびに、匿名ユーザーが既存のユーザーのパスワードを変更できる欠陥があると、その匿名ユーザーがアカウントを乗っ取る可能性があるため、追加のセキュリティレビューが必要になる場合があります。
  3. また、パスワードが変更されたことをユーザーに通知したり、アプリケーションに対するOAuthトークンの問題を無効にしたりするなど、他の追加のセキュリティ機能を含めることもできます。メンバーシッププロバイダーは素晴らしいですが、この追加の手段を提供していません。
  4. これは別のURIであるため、その使用状況を監視し、IPアドレスに関連付けて、誰かがユーザーアカウントを侵害しようとしているかどうかを検出できます。

データコントラクトを次の場所に置くことができますhttps://example.com/users/{id}/password

[DataContract]
public class ChangePassword
{
   [DataMember]
   public string OldPassword { get; set; }

   [DataMember]
   public string NewPassword { get; set; }
}

後者は、クライアントが実際にこのアクションを実行できるかどうかを承認することを前提としています。PUTとPOSTのどちらを使用するかについては、RESTでPUTとPOSTを比較することをお勧めします。さらに、RESTfulWebサービスとRESTAPIデザインルールブックという本は、URIレイアウトを含むRESTfullサービスを設計するときに非常に貴重でした。

于 2012-02-27T21:45:21.350 に答える