ダイジェスト認証と基本認証の違いは何ですか?
4 に答える
ダイジェスト認証は、ユーザー名、パスワード、サーバー提供の nonce 値、HTTP メソッド、および要求された URI にハッシュ関数を適用することにより、暗号化された形式で資格情報を通信します。
一方、基本認証では、暗号化されていないbase64 エンコーディングが使用されます。
したがって、基本認証は通常、https などのトランスポート層セキュリティが提供されている場合にのみ使用する必要があります。
詳細については、 RFC-2617を参照してください。
HTTP 基本アクセス認証
- ステップ 1 : クライアントは情報を要求し、ユーザー名とパスワードをプレーン テキストでサーバーに送信します。
- STEP 2 : サーバーは必要な情報またはエラーで応答します
基本認証では、ユーザー名とパスワードの情報を含む暗号化文字列を生成するために、base64エンコーディング (暗号化ではありません) を使用します。HTTP Basic を SSL 経由で実装する必要はありませんが、そうしないと、まったく安全ではありません。だから私はそれなしでそれを使うという考えを楽しませるつもりはありません.
長所:
- 実装が簡単であるため、クライアント開発者は行う作業が少なくなり、配信にかかる時間が短縮されるため、開発者は API を使用したくなる可能性が高くなります。
- ダイジェストとは異なり、bcrypt などの任意の暗号化方法でパスワードをサーバーに保存できるため、パスワードがより安全になります。
- 情報を取得するために必要なサーバーへの呼び出しは 1 回だけです。クライアントは、より複雑な認証方法よりもわずかに高速になります。
短所:
- SSL は基本的な HTTP よりも実行が遅いため、クライアントの速度がわずかに遅くなります。
- クライアントを制御できず、サーバーに SSL の使用を強制できない場合、開発者は SSL を使用しない可能性があり、セキュリティ リスクが発生します。
要約すると、クライアントを制御できる場合、またはクライアントが SSL を使用していることを確認できる場合は、HTTP Basic が適しています。SSLの遅さは、たった1回のリクエストの速さで相殺できる
基本認証の構文
Value = username:password
Encoded Value = base64(Value)
Authorization Value = Basic <Encoded Value>
//at last Authorization key/value map added to http header as follows
Authorization: <Authorization Value>
HTTP ダイジェスト アクセス認証
ダイジェスト アクセス認証は、ハッシング (つまり、ダイジェストは小さな断片に分割することを意味します) 方法論を使用して、暗号化結果を生成します。HTTP ダイジェスト アクセス認証は、次のように機能する、より複雑な形式の認証です。
- STEP 1 : クライアントがサーバーにリクエストを送信する
- ステップ 2 : サーバーは特別なコード ( nonceと呼ばれる、つまり一度だけ使用される番号)、レルムを表す別の文字列(ハッシュ) で応答し、クライアントに認証を要求します。
- ステップ 3 : クライアントは、この nonce と、暗号化されたバージョンのユーザー名、パスワード、およびレルム (ハッシュ) で応答します。
- ステップ 4 : サーバーは、クライアントのハッシュがユーザー名、パスワード、レルムの独自のハッシュと一致する場合は要求された情報で応答し、一致しない場合はエラーを返します。
長所:
- ユーザー名やパスワードが平文でサーバーに送信されることはないため、非 SSL 接続は、SSL 経由で送信されない HTTP Basic リクエストよりも安全です。これは、SSL が不要であることを意味し、各呼び出しがわずかに高速になります。
短所:
- 必要な呼び出しごとに、クライアントは 2 回の呼び出しを行う必要があるため、プロセスは HTTP Basic よりもわずかに遅くなります。
- HTTP ダイジェストは、基本的にハッキングされる可能性があることを意味する中間者セキュリティ攻撃に対して脆弱です
- HTTP ダイジェストは強力なパスワード暗号化の使用を防ぎます。つまり、サーバーに保存されているパスワードがハッキングされる可能性があります。
要約すると、HTTP ダイジェストは少なくとも 2 つの攻撃に対して本質的に脆弱ですが、HTTP Basic over SSL でパスワードに強力な暗号化を使用するサーバーは、これらの脆弱性を共有する可能性が低くなります。
ただし、クライアントを制御できない場合、SSL を使用せずに基本認証を実行しようとする可能性があります。これは、Digest よりも安全性がはるかに低くなります。
RFC 2069 ダイジェスト アクセス認証構文
Hash1=MD5(username:realm:password)
Hash2=MD5(method:digestURI)
response=MD5(Hash1:nonce:Hash2)
RFC 2617 ダイジェスト アクセス認証構文
Hash1=MD5(username:realm:password)
Hash2=MD5(method:digestURI)
response=MD5(Hash1:nonce:nonceCount:cnonce:qop:Hash2)
//some additional parameters added
Postman では次のようになります。
ノート:
- Basic および Digest スキームは、ユーザー名とシークレットを使用した認証専用です。
- Bearer 方式は、トークンを使用した認証専用です。
基本認証では、base 64 エンコーディングを使用して、ユーザー名とパスワードの情報を含む暗号化文字列を生成します。
ダイジェスト アクセス認証は、ハッシュ方法論を使用して暗号化結果を生成します。