2009-04-21 13 views
1

現在、ユーザーアカウント機能を備えたウェブサイトがありますが、一般的なタスク用のAPIを提供することで、ユーザーが他のデバイスやウェブサイトからアカウントを管理したり、他のデバイスやウェブサイトを通じてアクションを実行できるようにするAPIを提供する予定です。HTTPサービス内での認証方法

は現在、ウェブサイトのログインはどのように我々は、APIでこの機能を提供する

などのセッションハイジャックを防ぐために、適切なセキュリティ対策とPHPのセッションを使用して、セキュリティのためにHTTPSを介して行われ、その後、管理されていますか?

POSTを実行せずにログインを送信する方法はありますか? (おそらくGETはAPIコールを介してこれを行う唯一の方法です)。次のようなURLを入力していますか:https://www.example.com/login/[email protected]=bar安全ですか? URLが電信線を介して送信される前にhttps設定が行われますか?

私がそれを並べ替えることができれば、私はログインにアクセストークンを返すでしょう。最初の要求は、このトークンを含める必要があり、応答が....ように

うこの作品を、第2の要求で使用するために、新しいトークンを返すとすべきか?

答えて

2

あなたはbasic www-authenticationを使用することができます。それは基本的にusername + passwordを含むヘッダーです。これに関する良いことは、ステートレス(別のログインプロセスは必要ありません)であり、非常にうまくサポートされていることです。実装も非常に簡単です。 httpsを超えてサービスを提供する限り、セキュリティは問題ありません。

https://www.example.com/login/[email protected]=barは安全ですか?

ログに記録される可能性があるため、URLに資格情報を入れるのは良いことではありません。

httpsの設定は、URLが電信線を介して送信される前に行われますか?

はい、httpsはhttpプロトコルの前に確立されています。悪意のある人が見ることができるのは、エンドポイントのIPアドレスだけです。

+0

...それは、「他のデバイス/ウェブサイトを介してアクションを実行する」のVinsageの「他のウェブサイト」が信任状を知る必要があることを意味します。 – Arjan

+0

@Arjan:エンドポイントが両方ともパスワードを知る必要があるかどうかを尋ねるなら、はい。それが問題であれば、代わりにSSL接続用の証明書を使用できます。 httpsは暗号化と認証の両方を提供するため、明示的な認証は必要ありません。サーバーとクライアントの両方に対して、設定するのが少し重いです。 – troelskn

+0

私の答えであなたのコメントが与えられたと思いますが、確信してください.OAuthを使用すると、ユーザーは(信頼されていない)第三者に代わってサービスを利用する権限を与えます。第三者はユーザーの資格情報を知ることができず、ユーザーは一度認可を付与するか、いつでも認可を取り消すことができます。実際、Visageが本当に第三者にAPIへのアクセスを許可するかどうかは、すべての点で決まります。 – Arjan

0

SSLでSOAPを使用することを考えましたか?理論的には、SOAPを介してユーザーを認証できる必要があります。

2

OAuthなどの標準を使用しますか?許可すると、ユーザーは認証されたトークンを望みどおりに保持できます。

また、何かGETリクエストが来たときにログインにリダイレクトすることができます。たとえば、任意のサイトがURLにリンクしてadd a tweetにTwitterすることができます。ログインしていない場合、Twitterは最初にログインページにリダイレクトします。参照サイトはTwitterのユーザー名を知る必要はありません。

(とはい:URLが送信される前に、HTTPSは、サーバーのIPアドレスに基づいて、確立されている。)

+0

OAuthは認証用であり、認証用ではありません。このケースにも当てはまるかもしれませんが、私はそれがVisageが求めているとは思いません。 – troelskn

+0

さて、トークンを取得するには、最初に認証する必要があります。また、他のウェブサイトがAPIにアクセスできるように(Visageが尋ねているように)、認証資格情報を明らかにせずに、私はOAuthが行く方法だと感じています。 – Arjan

+0

もう一度質問を読んで、あなたはそれについて正しいかもしれないと思います。 – troelskn

0

REST APIで認証を実行するには、発信者がヘッダーを設定する必要があります。すなわち、彼らはあなたが読んで認証するために使用する「X-YourApp-API-Key」ヘッダを設定する。これにより、POSTメソッドやGETメソッドだけでなく、PUT、HEAD、DELETEなどの認証を行うことができ、RESTメソッドを完全に補完することができます。

すべての通話がHTTPS経由であれば、これだけで問題ありません。 HTTPSを介して認証し、通常のHTTP経由で後続の呼び出しを行う場合は、OAuthのように動作するものを実装し、クリアな要求のトークンを発行する必要があります。

+0

私は同意しません。 OAuthなどは、サードパーティにAPIを使用させる場合、サードパーティが(HTTPSを使用しているかどうかにかかわらず)完全なユーザーの資格情報を知っている必要がある場合に必要です。 – Arjan

+0

"X-YourApp-API-Key"は、 "Authorization"(www-認証とも呼ばれます)として標準化されています。相互運用性を確保するために使用してください。 – troelskn

+0

第三者がAPIを別のエンドユーザーのために使用している場合は、ユーザーの資格情報を保護するためにOAuthが必要です。第三者がAPI自体を直接使用している場合は、API自体が使用されていない可能性があります。それはあなたのAPIが何であるかによって異なります。 – Pax

関連する問題