特定のデバイスでのみ使用される API を作成しています。github が SSH を使用して認証する方法と同様に、公開鍵と秘密鍵のペアを使用して認証したいと考えています。
私がうまくいくと思うスキームは次のとおりです。
- デバイスは、その ID を使用して承認を要求します。
- サーバーは、提供された ID によってデバイスの公開鍵を見つけ、ランダムな文字列を暗号化します。文字列がデバイスに送信されます。
- デバイスは暗号化された文字列を受信し、秘密鍵で復号化し、結果をサーバーに送り返します。
- サーバーは文字列をチェックして一致することを確認し、チェックが正しければデバイスに正しいセッション変数を設定します。
これらはすべて SSL 接続を介して行われるため、ステップ 3 をスヌープして再度認証に使用することはできません。一部のデバイスはこのタイプの認証を必要としないため、SSL 接続では、デバイスの公開鍵がサーバーの認証局によって生成されたことを確認し、生成されていない場合は接続を閉じることができません。
まず第一に、これは理にかなっていますか、それとももっと良い方法がありますか? そして第二に、レールですでにこれを行っている宝石はありますか? これは、物事を行うためのやや一般的な方法のようです。