私はこの記事読んで数年前ですが、あなたのREST APIを確保する巧妙な方法を説明します。基本的に:
- 各クライアントには一意の公開/秘密キーペアがあります
- クライアントとサーバーのみが秘密鍵を知っています。有線で送信されることはありません
- 各リクエストで、クライアントはいくつかの入力(リクエスト全体、現在のタイムスタンプ、およびプライベートキー)を受け取り、それらをHMAC関数で実行してリクエストのハッシュを生成します
- 次に、クライアントは通常のリクエスト(公開キーを含む)とハッシュをサーバーに送信します
- サーバは(提供された公開鍵に基づいて)クライアントの秘密鍵を検索し、要求はの被害者ではないことを検証(確かに私は理解していないことを)いくつかのタイムスタンプのチェックを行い、リプレイ攻撃
- すべてが順調であれば、サーバーは秘密鍵と同じHMAC関数を使用して、リクエストの独自のハッシュを生成します
- 次に、サーバーは両方のハッシュ(クライアントが送信したハッシュとクライアントが生成したハッシュ)を比較します。それらが一致する場合、要求は認証され、続行が許可されます
それから私はJWTを偶然見つけました。ただし、最初の記事ではJWTについてまったく言及していないため、JWTが上記の認証ソリューションと異なるのかどうか、またそうである場合はその方法について疑問に思っています。
1
笑...私はちょうど同じ質問をしたかったのですが、あなたに出くわしました。ステートレス認証について最初に見つけたものの1つは、AWSのdocs.aws.amazon.com/AmazonSimpleDB/latest/DeveloperGuide/…で、このmassimilianosciacco.com/…のようなものを実装しました。それからJWS / JWTを見つけましたが、それはなんとなく似ています。しかし、私が理解している限り、JWTは標準であり、上記の他のソリューションはいくつかのカスタム実装です(標準化されていません)。私が間違っている場合、誰かが私を修正します。
—
nyxz
このような詳細について心配しているのは私だけではないことを知っておいてください!JWTは確かに同じように感じますが、ボーナスは標準化されていることです。このカスタムHMACソリューションでどのように(セキュリティ面で)公平になるのかと思っています。
—
smeeb