1. ホーム
  2. web-services

RESTful Web サービスでログインを実装するにはどうすればよいですか?

2023-07-20 01:59:44

質問

私は、サービス層を持つWebアプリケーションを構築しています。 サービス層は、RESTful デザインを使用して構築される予定です。 将来、Web アプリケーションと同じサービス レイヤーを使用する他のアプリケーション (iPhone、Android など) を構築することを想定しています。 私の質問はこれです - ログインをどのように実装すればいいのでしょうか? 私は、より伝統的な動詞ベースの設計からリソースベースの設計に移行するのに苦労していると思います。 もし私がSOAPでこれを構築していたなら、おそらくLoginと呼ばれるメソッドを持つことになるでしょう。 RESTでは、私はリソースを持っているはずです。 ログインのためのURIをどのように構築すべきか、理解するのに苦労しています。 このようなものであるべきです。

http://myservice/ {ユーザー名}?p={パスワード}を入力してください。

EDIT: フロントエンドのWebアプリケーションは、認証に従来のASP.NETフレームワークを使用しています。 しかし、認証プロセスのある時点で、提供された認証情報を検証する必要があります。伝統的なWebアプリケーションでは、私はデータベース検索を行うでしょう。しかし、このシナリオでは、データベースの検索を行う代わりに、サービスを呼び出すことになります。 そのため、提供された認証情報を検証するためのサービスが必要です。 そして、提供された認証情報を検証することに加えて、おそらく、認証に成功した後のユーザーに関する何らかの情報(フルネーム、IDなど)も必要でしょう。 これで質問がより明確になることを願っています。

それとも、私はこのことについて正しい方法で考えていないのでしょうか? 私の質問を正しく説明するのが難しいように感じます。

コリー

どのように解決するのですか?

S.Lottがすでに指摘したように、ここでは2つのことが折り重なっています。ログインと認証

認証については、広く議論され、共通の合意が得られているため、ここでは対象外としています。しかし、RESTfulなWebサービスに対してクライアントが自分自身をうまく認証するために、実際には何が必要なのでしょうか?そうです、ある種のトークン、これをアクセストークンと呼びましょう。

クライアント) 必要なのはアクセストークンだけですが、それをRESTfulに取得するにはどうすればいいのでしょうか?

サーバー) 単純に作成すればいいのでは?

クライアント)どうして?

サーバー) 私にとってアクセストークンはリソースに他なりません。したがって、私はあなたのユーザー名とパスワードと引き換えに、あなたのために1つを作成します。

したがって、サーバーはユーザー名とパスワードを POST するためのリソース URL "/accesstokens" を提供し、新しく作成されたリソースへのリンク "/accesstokens/{accesstoken}" を返すことができます。 あるいは、アクセストークンとリソースのリンクを持つhrefを含むドキュメントを返します。

<access-token
  id="{access token id goes here; e.g. GUID}"
  href="/accesstokens/{id}"
/>

おそらく、実際にはアクセストークンをサブリソースとして作成しないので、レスポンスにその href を含めないでしょう。

しかし、そうすると、クライアントはそのリンクを代理で生成することができるかどうか?しません。

真にRESTfulなWebサービスは、クライアントがいかなるリソースリンクも生成する必要なく、自らナビゲートできる方法でリソースを一緒にリンクすることを忘れないでください。

最後の質問は、ユーザー名とパスワードをHTMLフォームとしてPOSTすべきか、XMLやJSONなどのドキュメントとしてPOSTすべきか、ということです。)