私はAPIを使って作業していますが、私はいつもあなたがキーと秘密を使わなければならない理由を疑問に思ってきました。ほとんどのAPIで作業する場合、なぜキーとシークレットの2種類の認証が必要ですか?
なぜ2種類の認証が必要ですか?
私はAPIを使って作業していますが、私はいつもあなたがキーと秘密を使わなければならない理由を疑問に思ってきました。ほとんどのAPIで作業する場合、なぜキーとシークレットの2種類の認証が必要ですか?
なぜ2種類の認証が必要ですか?
サーバーがAPI呼び出しを受け取るときには、2つのことを知る必要があります。誰が呼び出しを行っているのか、そして呼び出しが正当なものかどうか。
1つのアイテム(「キー」)があっただけで、すべての呼び出しにそれが含まれていれば、両方の質問に回答します。 「キー」に基づいて、サーバーはあなたが誰であるかを知っているだけで、そのキーを知っているだけなので、電話が実際にあなたから来ていることを証明します。しかし、すべての呼び出しでキーを含めることはセキュリティ上の慣習ではありません。誰かがあなたのメッセージを転送中に読み取ることができれば、あなたの鍵は侵害され、誰かがあなたのふりをすることができます。 HTTPSを使用している場合を除き、この方法は機能しません。
代わりに、「秘密」番号で署名されたすべての通話にデジタル署名を含めることができます。 (「秘密」番号自体は送信されません)。攻撃者があなたのメッセージを読むことを管理している場合、署名からこの「秘密」番号を知ることはできません。 (これはデジタル署名の仕組みです:一方向です)。
しかし、これは識別の問題を解決しません。後者の場合、サーバーは誰が呼び出しを行っているかをどのように知っていますか?それはすべての単一のユーザーの "秘密"との署名を検証しようとする可能性がありますが、もちろんこれは非常に時間がかかるでしょう。
私たちは次のようにします:「キー」(ユーザーを識別する)と「秘密」番号(メッセージが正当であることを証明する)を使用して作成された署名の両方を送信します。サーバーは、キーに基づいてユーザーを検索し、そのユーザーの「秘密」番号を使用して署名を検証します。
これは、あなたが小切手を書くときのようなものです。あなたの身分を証明するための口座番号とあなたの身分証明書を持っています。アカウント番号だけを持っていても、実際に小切手を書いたことは証明されません。口座番号なしの署名だけであれば、銀行はすべての口座のすべての署名とあなたの小切手を比較することになりますが、これは明らかに非効率です。
それはかなり説明的ですが、少し秘密の番号で署名することによって何を意味するのかについて少し混乱しますか? – OrangeRind
http://en.wikipedia.org/wiki/Digital_signature、または実際の例についてはhttp://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.htmlを参照してください。基本的には、API「秘密」とAPIリクエスト自体(またはその最も重要な部分)の組み合わせのハッシュ関数を計算することが可能です。これが「署名」です。 –
これは、すべての通信がHTTPSにあるときに別の秘密鍵が必要な理由を説明していません。 – opengrid
どのような種類のAPIですか? –