1

認証とアカウント管理のための REST サービスを設計したいと考えています。以下がRESTスタイルを満たしているかどうか教えてください。

POST http://server/security/authenticate?username=xxx&password=yyy
POST http://server/security/forgotPassword?username=xxx&email=yyy
PUT  http://server/security/changePassword?oldPassword=xxx&newPassword=yyy

HTTP メソッドの POST と PUT はここにありますか? 認証は何も変更しないので、ここで GET を使用した方がよいでしょうか? 私は混乱しています。

4

2 に答える 2

5

そうしないでください。いかなる理由であれ、URLにパスワードを入れないでください。

この場合、私はあなたがやろうとしていることについて少し混乱しています-一般に、REST APIの認証/承認はリソース自体によって処理されませんが、別の認証APIを設計している場合は、おそらくこれ理にかなっています。簡単な答えは、認証データをリクエストの本文に入れて、SSL経由で送信することです。それで

 POST https://server/security/changePassword/

本体にデータがあります。そして、ユーザーがサービス内で認証する必要があることを確認してください。

REST設計の観点から、POSTは本体で操作を実行するサービスと考えてください。理想的には、200/201ステータスと、作成/変更されたリソースのURLを含むLocationヘッダーで応答するようにします。

PUTは、URL(クエリパラメータではなく)にリソースが作成される場所が含まれている場合に使用することを目的としています。

間違いなく、それは安らかな動きになるでしょう

GET https://server/security/{username}/{email}/forgottonPassword/

しかし、それは少し虐待です...投稿に固執します。

リソースで認証を行おうとしている場合は、Authorizationヘッダー(名前は間違っていますが、使用するヘッダー)がその場所です。

この場合のユーザー名/パスワード認証を行うための標準的な安らかな方法は、基本認証と呼ばれます

于 2012-07-18T18:17:20.777 に答える
4

RESTスタイルのサービスをモデル化するときは、リソースで考えます。リソースはuserです。公開したいサービス(サービスを考えるとRPCスタイルが強制されるため悪い)は、認証され、後でAuthorization HTTPヘッダーで使用できるセキュリティトークンを取得します。パスワードを忘れて、パスワード機能を変更します。

まず、ベースURLで常に到達可能なリソースユーザーをモデル化します

https://server/user/{username}

認証するには、セキュリティトークンが必要です。これにより、セキュリティトークンを作成するユーザーのサブリソースにPOSTを発行できます。

POST https://server/user/{username}/securityToken

これにより、HTTP認証ヘッダーで使用できる新しいセキュリティトークンが発行されます。POSTここでは、securityTokenをユーザーのある種のサブリソースとしてモデル化するため、リクエストを発行していますuser/someusername/securityToken。セキュリティトークンの下で作成されたサブリソースを使用して、ユーザーに機能を公開し、成功または失敗したすべてのログイン要求を確認できます。

次に、忘れたパスワードをリクエストします。ここで重要なのはですrequest。つまり、リクエストを発行し、ユーザーの新しいパスワードを忘れたリクエストサブリソースを作成します。サブリソースを作成するために、RESTスタイルは:を使用しPOSTます

POST https://server/user/{username}/password/request

これにより、認証された場合にのみアクセス可能なすべてのパスワード要求のサブリソースを作成できます(必須ではありません)。したがって、ユーザーが時間の経過とともに発行されたすべてのパスワード要求を取得できるRESTスタイルのURLを公開できます。

ユーザーのパスワードサブリソースがあるため、パスワードを変更する最後の機能は非常に簡単ですPOST。パスワードリソースに対してリクエストを発行できます。

POST https://server/user/{username}/password
于 2012-07-18T19:02:38.713 に答える