APIがクライアントに認証を要求する場合、2つの異なるシナリオが使用されているのを見てきましたが、自分の状況にどのケースを使用すればよいか迷っています。
例1.企業がAPIを提供して、サードパーティがHTTP Basicを使用してトークンとシークレットで認証できるようにします。
例2. APIは、HTTP Basicを介してユーザー名とパスワードを受け入れ、エンドユーザーを認証します。一般的に、彼らは将来のリクエストのためにトークンを取り戻します。
私のセットアップ:モバイルアプリとウェブアプリのバックエンドとして使用するJSON APIを用意します。モバイルアプリとウェブアプリの両方がトークンとシークレットを一緒に送信することは、他のサードパーティをブロックするAPIにアクセスできるようになるため、これらの2つのアプリだけが適切な方法のようです。
ただし、モバイルアプリとウェブアプリでは、ユーザーがログインして投稿を送信したり、データを表示したりできるようになっています。そのため、リクエストごとにHTTP Basicを介してログインすることもできます。
どういうわけか、これらの両方の方法を組み合わせて使用するのですか、それとも各リクエストでエンドユーザーの資格情報(ユーザー名とトークン)のみを送信するのですか?エンドユーザーの資格情報のみを送信する場合、それらをクライアントのCookieに保存しますか?
HTTP基本認証では、すべてのリソース要求でユーザー名とパスワードを送信する必要があります。 username:passwordは、「Basic」で始まる「Authorization」リクエストヘッダーのbase64エンコード文字列で渡されます。すべてのhttp通信が(sslを介して)暗号化されている場合、Authorizationヘッダーの情報は、攻撃者がその情報を入手できる可能性が低いため、攻撃者が簡単に使用できないはずです。
基本認証のSSL暗号化httpで十分です。
OAuth/OpenIDは、トークン/シークレットとともに機能しますか?
私は最近次のシナリオを考えました:
簡単なテストとして、次のことができました。
これにより、モバイルデバイスアプリケーションは、Webフロントエンド(同じアカウント)経由と同じ資格情報で認証され、APIへのアクセスを承認することもできます。