私はAPIの構築を検討しており、APIへのアクセスを管理するためのoauthを検討していましたが、私が行っているのは、企業がデータにアクセスしてサイトに組み込むことを可能にするb2bシステムです。最初はb2cはありません。
そのため、oauthは私にとって適切なツールではないようです。キーベースのシステムの構築に関する情報源を探していましたが、何も見つかりませんでした。
すでに何か利用できるものはありますか?ユーザーが送信したデータなどのハッシュを作成するのが最善ですか?
必要なのは、ユーザーを一意に識別するものだけです... UUIDまたはUUIDのハッシュを使用するだけです。
この ID が安全なチャネルを介して渡されることを確認してください。安全でないチャネルを介して渡す場合は、HTTP ダイジェスト認証と同様に ID を保護する方法を実装する必要がある場合があります。
要件に応じて、Web API の世界では、パートナー/開発者に API キー (識別) を提供し、呼び出しに署名する (認証) ことを要求することはかなり標準的です。署名を指定する方法はたくさんあります。最近の非常に一般的なものは次のとおりです。呼び出しのすべてのパラメーター、タイムスタンプ (+/- 5 分ウィグル)、共有シークレットを取得し、SHA-1 または MD5 (SHA-1 の方が良い) を使用してハッシュします。
これを自分で実装するか、パートナー (いくつかあります) を見つけて実行してもらうことができます。
ここで提案されている一般的なアプローチ (API キーと現在の時刻を含むハッシュを使用する) はすべて適切です。メッセージに「パスワード」を含めるよりも確実に優れています。
ただし、HMAC と呼ばれる、この "mung" 操作を行うための暗号標準の方法があります。より標準的/堅牢/安全なものが必要な場合は、一見の価値があります。
最後に、明らかにセキュリティ オプションの「ゴールド スタンダード」があります。デジタル証明書を使用してすべてのリクエストに署名するか (計算コストが高くなる可能性があります)、最初のリクエストに署名して使用制限のあるセッション キーを生成します (たとえば、1 つの API のみ、 60 分後に有効期限が切れます)。
または、トランスポート層に双方向 SSL を使用し、アプリケーション / API 内で単純に信頼することもできます。
本当にあなたがそれをどれだけ安全にしたいかによります... :]
ほぼすべての Web 2.0 サイト/サービスを見てください。それらはすべて、認証の実行と API キーの管理の程度が異なります。Flickr、Twitter、Github など
APIキーが推測できる状況を作り出す可能性があるため、ユーザーが送信したデータを使用するだけではありません。一般に、ユーザーが生成したデータを取得し、それを比較的一意のデータ(つまり、現在のシステム時刻)と組み合わせて、SHA-1などを使用してハッシュします。そうでない場合は、表現を変更する可能性があります。明らかにSHA-1ハッシュにし、それをキーとして使用します。