APIを開発しました。私は混乱し、何日も記事を読んでいます。実際、私の質問はこれらに近いですが正確ではありません(多分それらの組み合わせ)。
セキュリティ保護RESTさまざまなクライアントからアクセスされるAPI
安全なログインなしRESTごく少数のクライアント用のAPI
APIに安全性を提供する必要があります。 APIは、クライアントのサードパーティアプリケーションで使用されます。以下のスキーマを添付しました。
私は何をすべきか?
SSL\TLSを使用したHTTP-Basic、SSL\TLSを使用したHTTP-Digest、OAuth 2.0またはその他の必要条件
編集(2015-03-25):
この部分はあきらめました。下記の「編集(2015-04-01)」をご覧ください
SSLを実装することにしました+ OAuth 2.0( Resource Owner Password Credentials Grant )。)。シナリオに都合が悪いと思われる場合は、お知らせください。
+----------+
| Resource |
| Owner |
| |
+----------+
v
| Resource Owner
(A) Password Credentials
|
v
+---------+ +---------------+
| |>--(B)---- Resource Owner ------->| |
| | Password Credentials | Authorization |
| Client | | Server |
| |<--(C)---- Access Token ---------<| |
| | (w/ Optional Refresh Token) | |
+---------+ +---------------+
Figure 5: Resource Owner Password Credentials Flow
図5に示されているフローには、以下のステップが含まれています。
(A)リソース所有者は、クライアントにユーザー名とパスワードを提供します。
(B)クライアントは、リソース所有者から受け取った資格情報を含めることにより、認証サーバーのトークンエンドポイントにアクセストークンを要求します。要求を行うとき、クライアントは許可サーバーで認証します。
(C)許可サーバーはクライアントを認証し、リソース所有者の資格情報を検証し、有効な場合はアクセストークンを発行します。
編集(2015-04-01):
私は OAuth 2.0クライアント資格情報 を実装しました。そして今、クライアントのAPIリクエストにSSL証明書を実装する方法を探しています。
クライアント資格情報付与タイプは、機密クライアントのみが使用する必要があります。
+---------+ +---------------+
| | | |
| |>--(A)- Client Authentication --->| Authorization |
| Client | | Server |
| |<--(B)---- Access Token ---------<| |
| | | |
+---------+ +---------------+
Figure 6: Client Credentials Flow
図6に示すフローには、以下のステップが含まれています。
(A)クライアントは承認サーバーで認証し、トークンエンドポイントにアクセストークンを要求します。
(B)許可サーバーはクライアントを認証し、有効な場合はアクセストークンを発行します。
あなたが概説しているオプションについて私が言うことは、SSLを使用したHTTP Authはより単純ですが柔軟性が低いオプションであり、Oauth2はより複雑ですが、それを使用して実現できることにおいてより柔軟性があります。
ASCIIアート図で説明したように、OAuth2を使用すると、リクエストの認証にパスワードの代わりに使用できるトークンを作成できます。これは、 HTTP Basic/Digestよりも有利です。つまり、ユーザーのパスワードをクライアントに保存する必要がなく、トークンを保存するだけで済みます。
したがって、一般的にOAuth2を適切に実装できる場合は、それでうまくいくと思います...
OAuth 2.0トークンが危険にさらされている場合は、トークンのTTLを気にするだけで十分です。
HTTP基本認証ヘッダーが危険にさらされた場合、資格情報は期限切れになりません。 client_idとsecretを手動で変更する必要があります。それは、それらが危険にさらされていることを知っていたり、考えていたりする場合です。そして、これに対応するために毎回クライアントコードを変更する必要があるでしょう。
これら2つのオプションの主な違いは、OAuth 2.0トークンミンティングにはclient_idとシークレットが交換される1つの重要なステップが含まれることです。HTTPBasic Authでは、すべてのAPI呼び出しで同じ交換が行われます。
この観点から、OAuth 2.0ははるかに安全なオプションです。