安らかなサービスとユーザーのメンテナンス - URL構造とコマンドの質問

StackOverflow https://stackoverflow.com/questions/6313460

質問

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

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

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

/ユーザー/投稿 - 複数のユーザー(ユーザーオブジェクトの投稿)を作成または更新できます

ユーザーを更新または作成しても、この投稿は問題ではありません

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

/users/{username}/パスワード投稿 - ユーザーパスワードを変更します。

しかし、私はここで異なるオブジェクトを渡さなければなりませんか? (私はJSONを使用しています)

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

役に立ちましたか?

解決

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

ユーザーDBSでは、パスワードをすべて自分のテーブルにすべて(塩漬けおよび伸ばした)保存するため、パスワードを別のリソースとして簡単に表示できます。しかし、あなたがそれほど細かい粒度のコントロールを持っていないからといって、あなたが同じことをすることができないというわけではありません - しかし、私はパスワードの取得を実装することを検討しません、最終的にあなたはそのために認証サービスが必要です。一種のプロトコル。

レストサービスは、基礎となる構造を真に考慮せずに、そのデータを自由に表現できます。

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

他のヒント

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

HTTPSに登場しても、URIのClearに機密情報を含めることはありません。その情報は、サーバー上のファイルを記録するために、またはさらに悪いことに、ソフトウェアによって記録されているために記録される可能性があるためです。機密情報がボディの一部またはヘッダーの一部として送信されることを確認してください。

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; }
}

後者は、クライアントが実際にこのアクションを実行できるかどうかを承認することを想定しています。あなたは見たいかもしれません vs投稿を休ませます PutまたはPostを使用するかどうか。さらに、本 安らかなWebサービスREST APIデザインルールブック URIレイアウトを含むRestfullサービスを設計するとき、私にとって非常に貴重でした。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top