web-dev-qa-db-ja.com

APIでhttp基本認証を使用するには

APIがクライアントに認証を要求する場合、2つの異なるシナリオが使用されているのを見てきましたが、自分の状況にどのケースを使用すればよいか迷っています。

例1.企業がAPIを提供して、サードパーティがHTTP Basicを使用してトークンとシークレットで認証できるようにします。

例2. APIは、HTTP Basicを介してユーザー名とパスワードを受け入れ、エンドユーザーを認証します。一般的に、彼らは将来のリクエストのためにトークンを取り戻します。

私のセットアップ:モバイルアプリとウェブアプリのバックエンドとして使用するJSON APIを用意します。モバイルアプリとウェブアプリの両方がトークンとシークレットを一緒に送信することは、他のサードパーティをブロックするAPIにアクセスできるようになるため、これらの2つのアプリだけが適切な方法のようです。

ただし、モバイルアプリとウェブアプリでは、ユーザーがログインして投稿を送信したり、データを表示したりできるようになっています。そのため、リクエストごとにHTTP Basicを介してログインすることもできます。

どういうわけか、これらの両方の方法を組み合わせて使用​​するのですか、それとも各リクエストでエンドユーザーの資格情報(ユーザー名とトークン)のみを送信するのですか?エンドユーザーの資格情報のみを送信する場合、それらをクライアントのCookieに保存しますか?

17
Paul Sylling

HTTP基本認証では、すべてのリソース要求でユーザー名とパスワードを送信する必要があります。 username:passwordは、「Basic」で始まる「Authorization」リクエストヘッダーのbase64エンコード文字列で渡されます。すべてのhttp通信が(sslを介して)暗号化されている場合、Authorizationヘッダーの情報は、攻撃者がその情報を入手できる可能性が低いため、攻撃者が簡単に使用できないはずです。

基本認証のSSL暗号化httpで十分です。

7
Nathan Pilling

OAuth/OpenIDは、トークン/シークレットとともに機能しますか?

私は最近次のシナリオを考えました:

  • Webアプリケーションフロントエンド
  • 基礎となるREST API
  • REST APIにアクセスするモバイルデバイスアプリケーション

簡単なテストとして、次のことができました。

  • OAuthを使用してWebアプリケーション経由でユーザーを認証する
  • REST APIはOAuthを介して承認され、結果としてシークレットが生成されてクライアントに返されます
  • 次に、モバイルデバイスはOAuthを介して認証され、REST APIによってシークレットを介して承認されます。

これにより、モバイルデバイスアプリケーションは、Webフロントエンド(同じアカウント)経由と同じ資格情報で認証され、APIへのアクセスを承認することもできます。

0
Brendan Green