注: このトピックに関する StackOverflow の質問が他にもたくさんあることは知っています。私はそれらの多くを読んだだけでなく、他の多くのウェブサイトも読みました。私はまだ次の質問があります。
それで、私は新しい製品用の REST API を構築しています。現時点では、API は完全に私たちの Web サイトと電話アプリによる個人的な使用のみを目的としています。しかし、将来公開できるように API を設計するのが賢明かもしれないと考えています。
認証
OAuth を見てきましたが、SSL 経由の HTTP 基本認証は、私たちの API にとって十分に安全だと思います。私が理解していることから、SSL を介した HTTP 基本認証は、REST API を認証するための完全に実行可能な方法です。また、API 開発が初めての私にとっては非常にシンプルで魅力的です。
認可
ユーザーがユーザー名とパスワードを使用して API にログインすると、API の特定の部分へのアクセスのみが許可されます。つまり、自分のコンテンツにはアクセスできますが、他のユーザーのコンテンツにはアクセスできません。さらに、全員ができることは限られているかもしれません。
ユーザー アカウントに加えて、よりグローバルな管理タスク用に他の (ユーザー以外の) アカウントも用意する予定です。これらのアカウントは、API への完全なアクセス権を持つ可能性があります。
これは良いデザインですか?または、この方法でユーザーを認証するのは悪いことですか? この方法でクライアント (つまりアプリ) のみを認証する必要がありますか?
セッション
私の大きな疑問は、ユーザーが Web アプリにログインするときに、ユーザーのセッションをどのように管理すればよいかということです。REST では、リクエストごとにユーザー名とパスワードを送信することが規定されています。さらに、REST API はステートレスであるため、そこでセッションを管理することはできません。ただし、何らかの方法で Web アプリにログインしたことを追跡する必要があります。リクエストごとに手動でログインできないことは明らかです。
1 つのアプローチは、ユーザーがログインした後、ログイン資格情報 (電子メールとパスワード) を PHP セッションに保存することです。その後、API への後続の各リクエストで、それらの資格情報を使用できます。ただし、PHP セッションでユーザー名とパスワードを保存することは、間違っていると感じ、非常に安全ではありません。しかし、この方法で行われなければ、REST API と対話するときにセッションをどのように管理しているのでしょうか?
ユーザーのログイン資格情報をキーチェーンに保存できるため、電話アプリの方が簡単です。
設計に関する質問を手伝ってくれる人はいますか?