web-dev-qa-db-ja.com

APIキーからワンタイムトークンを生成しますか?

thatのユーザーを許可するDrupalモジュールを構築しているWebサイトがありますDrupalサイトDrupalサイトから直接自分のWebサイトに移動します。

私はDrupalの各サイト管理者に秘密のAPIキーを配布するつもりであり、その値をDrupalモジュールのコピーに入力する必要があります。

このDrupalサイトが私のモジュールをユーザーに提示する場合、特定のリンクをクリックすると、ユーザーがサイトに移動し、サイトがこのナビゲーションの認証に使用できる一連の秘密データが表示されます。ユーザーにフォームが表示され、リンクが表示されるため、リンクをクリックすると、POSTを介してフォームが「送信」され、ユーザーもリダイレクトされます。

この秘密の「api-key」を使用して、ユーザーのブラウザに渡される、ある種の時間制限付き/ワンタイムコードを生成する必要があります。この生成されたコードをコピーするスマートユーザーは、それを再利用して後で自分のサイトにアクセスすることはできません。

  1. このAPIキーをパスワードとして使用して、残りのPOSTリクエストと一致するデータを暗号化する必要がありますか?受け取ったら、APIキーのコピーを使用して復号化し、残りのデータと一致する場合は、検証済みと見なしますか?

  2. または、私はある種の一方向ハッシュを実行する必要があります-md5?

  3. 現在時刻を一方向にハッシュして、5〜10分間のみアクセスを許可する必要がありますか?

https://stackoverflow.com/questions/5549411/generating-one-time-tokens-from-api-key から移動)

6
siliconpi

何よりもまず、セキュリティに関連する目的でMD5を使用しないでください。これは非常に壊れたアルゴリズムです。 SHA2ファミリーのすべてを使用する必要があります。SHA256が最適です。このタイプの認証を実行する1つの方法は、 [〜#〜] hmac [〜#〜] を使用することです。APIキーは、アルゴリズムで秘密キーKとして機能できます。シークレットAPIキーを持つサーバーは、投稿を受け入れ、認証トークンを提供する必要があります。結果のメッセージには、IDと、そのPOST要求のメッセージ認証コードが必要です。IDは、APIユーザーの主キーである可能性があり、認証コードはサーバーによって生成されます。このAPIを使用しています。

この場合、 公開鍵暗号 はやりすぎであり、対称暗号(「暗号化」)はまったく役に立ちません。

4
rook

私はずっと前にJoomlaへのOTP(ワンタイムパスワード)プラグインを実装しました。

ソースコードは here です。

私がやろうとしていたことは、有効なセッション内で、特定の時間にいくつかのアクションを認証するOTPを生成することでした。 OTPは、SMSなどの帯域外チャネルによって送信されます。残念ながらプロジェクトは終了しましたが、このコードベースは何らかの形であなたに役立つと思います。

0
VP.