モバイル アプリと ServiceStack Web サービス バックエンドを構築しています。ServiceStack の認証機能は素晴らしいように見えますが、その柔軟性が失われやすいため、ガイダンスは非常に高く評価されています。Web サービス内でユーザーなどを格納するために、独自の db テーブルを使用します。登録プロセスとその後の認証を次のようにしたいと思います。
- ユーザーは最初に電子メール アドレスのみを提供し、Web サービスは登録キーをユーザーに電子メールで送信します。
- ユーザーがキーを入力します。アプリは、登録のために Web サービスに送信します: 電子メール、キー、および一意のデバイス識別子。
- Web サービスはキーを検証し、電子メールとデバイス ID を保存します。アプリが後の認証に使用する認証トークンで応答します。
その後の Web サービス要求は、デバイス ID と認証トークン (またはそれを使用して作成されたハッシュ) を提供します。アプリはあまりおしゃべりではないので、Web リクエストごとに認証の詳細を送信したくなります。
質問 1 : ServiceStack の登録 API にフックする必要がありますか、それともカスタム Web サービス呼び出しをいくつか追加するだけですか? たとえば、ServiceStack の登録を使用しないと、次のようになります。
- 電子メール アドレスとデバイス ID を使用して、登録 Web サービスに投稿します。私の Web サービスは、キーを含む登録メールを送信し、user db テーブルにレコードを追加します。
- ユーザーがキーを入力すると、今度はキーも一緒に登録 Web サービスに再度送信されます。私のWebサービスはキーを検証し、ユーザーを登録済みとしてマークするユーザーテーブルを更新し、認証トークンを作成して記録し、呼び出し元に返します
- 後続のリクエストは、デバイス ID をユーザー名、認証トークンをパスワードとして、http 基本認証を使用して送信されます。このサービスはあまりおしゃべりではないので、リクエストごとにクレジットが送信されます。
- httpRequest.GetBasicAuthUserAndPassword() で資格情報を取得し、db データに対して資格情報を検証する CredentialsAuthProvider を実装します。
しかし、ServiceStack に組み込まれている登録を使用する必要があるように感じます。
質問 2 : 各リクエストで認証の詳細を渡すことの何が問題になっていますか? これにより、アプリのリクエストを簡単に作成できるようになりますが、ServiceStack の例に基づいて「完了」しているようには見えません。おそらく、すべての呼び出しを再認証する必要がある多くの要求がある場合、非効率的であるためです-他の理由はありますか? 私のアプリはせいぜい数分ごとに 1 つの Web リクエストしか行わないので、セッションを避けて各リクエストを再認証する方が簡単に思えます。
質問 3 : CredentialsAuthProvider のサブクラス化は正しい軌道に乗っていますか?
質問 4 : 認証トークンを毎回送信する代わりに、認証トークンを使用してハッシュを生成する意味はありますか? すべての通信は https 経由で行われます。