APIがhttp基本認証を使用する方法


17

APIがクライアントの認証を必要とする場合、2つの異なるシナリオが使用されているのを見て、状況に応じてどのケースを使用すべきか疑問に思っています。

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

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

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

ただし、モバイルアプリとWebアプリでは、ユーザーがログインして投稿を送信したり、データを表示したりすることができます。したがって、各リクエストでHTTP Basicを介してログインすることもできます。

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


CookieはHTTPプロトコルの一部ではなく、単なる一般的なブラウザ機能であることに注意してください。そのため、Web用に展開していない場合は忘れてください。
ヤムマルコビッチ

Cookieが推奨されない場合、APIに渡す資格情報をどのように/どこに保存しますか?
ポールシリング

Cookieは、ブラウザユーザーがセッショントークンをシームレスに保存するための手段にすぎません。開発者とやり取りする場合、これはシームレスである必要はありません。「チケット」を付与するパブリック接続サービスを設定でき、開発者はチケットをメモリ内または好きな場所に保持できます。私には実用的なWebサービスの経験がなく、おそらくこの種の標準的なソリューションがあることに注意してください。
ヤムマルコビッチ

エンドユーザー認証とAPI認証に関する私の質問の部分についてはどう思いますか?これについてはまだ不明です
ポールシリング

回答:


7

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

基本認証を使用したSSL暗号化httpで十分です。


2
これの例を提供できますか?それは私が...今、ちょうど非常にこだわって、右を必要とするものだ
ganders

0

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

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

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

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

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

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


1
したがって、この例では、ユーザーのみが認証を行っています。API(Webアプリ、モバイルアプリ)を呼び出しているクライアントは、自分が誰であるかを認証していません。理論的には、APIは公開され、潜在的にユーザー名とパスワードを掲示し、可能性のあるアプリケーションは、トークンを取り戻す
ポールSylling

ユーザーはアプリを介して認証を行っており、アプリはユーザーに代わって呼び出しを行っています。認証プロセスはトークンを取得し、アプリはそれを渡します。
ブレンダングリーン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.