2009-03-10 15 views
5

私はウェブAPIを設計しています。私はユーザーに自分自身を認証させる必要があります。私はちょっとユーザーが平文でユーザー名/パスワードを渡すことを躊躇しています。api.mysite.com/auth.php?user=x & pass = yウェブAPIの設計:認証方法

私が読んだ別のオプションはBase64ユーザー名/パスワードをエンコードしてHTTPリクエストを送信します。つまり、サーバー側では、[user ']と_GET [' password ']を取得して、どうにかそれらをデコードしますか?

これはTwitterの機能ですか:http://apiwiki.twitter.com/REST+API+Documentation#Authentication

答えて

7

Base64はまったく保護されていません。実際のセキュリティにはSSLを使用します。

+0

twitter APIがセキュリティをどのように使用しますか? http://apiwiki.twitter.com/REST+API+Documentation#Authentication – shergill

+0

彼らは、HTTP Basic Authを使用しています。これは、一般的なテキストであり、ポスターが望んでいないものです。 – truppo

+0

私はちょうど..もしそれが問題ではない/ツイッターの問題ではないかと疑問に思っています。それは本当に大したことですか? – shergill

2

これがWebサービスの場合は、より安全な認証形式を使用することをお勧めします。例えば、LiveJournalプロトコル:Challenge-Responseを見てください。

+0

TwitterのAPIがこれをどのように管理しますか:http://apiwiki.twitter.com/REST+API+Documentation#Authentication? – shergill

3

ちょうど今週、IETFはnew draftを公開し、HTTPのさまざまな認証メカニズムのセキュリティプロパティについて説明しました。役に立つ情報があるはずです。

個人的には、少なくともdigest authenticationについて読んで、それがあなたに適しているかどうかを分析することをおすすめします。

SSLを使用することもできます。ただし、パフォーマンス、キャッシュ性などを犠牲にして追加の問題も解決します。ペイロードデータを機密に保ちます。これが要件であれば、それはあなたの方法です。

5

truppoで述べたように、まずSSLを使用します。

多くのWebサービスには、後で使用されるトークンを返す「認証」サービスがあり、限られた期間だけ有効なため、平文で使用できます。期限が切れると、クライアントは単に別の認証を行います。

この主な利点は、SSL要求の数が減り、サーバーの負荷が軽減されることです。

1

APIには通常のユーザー名/パスワード認証を使用しないでください。人々は、マッシュアップサービスに外国のサービスからの資格を置くことを本当にすべきではありません。

ユージンが提案したように、oauth http://oauth.net/または少なくともチャレンジレスポンスベースのシステムを使用することを検討してください。

簡単な方法の1つは、ゲストサービスが自分のアプリとユーザーに接続されたトークンを生成させることです。いくつかの仕事をすると、トークンの作成を安全にして、いくつかのプライベート/パブリックキーメカニズムを持つ外国のサービスだけを許可することさえできます。

ユーザーは、ゲストサービスが認証に使用する前に、このトークンをアプリで認証する必要があります。

+0

ご意見ありがとうございます。チャレンジ・レスポンス・システムを実装するつもりです。 – shergill

0

私はこれを見つけましたarticleアイ開口部です。

要するに、ユーザーごとに1組のAPIキーを使用します。 1つはクライアント認証用で、もう1つはパラメータ署名用です。