OAuthとかの認証周りについて
メアドやユーザー名でログインするフォーム(ウェブ)でログインしたら、JWTトークンをクッキーとかに埋め込んで(使用できるドメインとかを厳密に設定したりとか)、認証情報を保存する(保存期間は決めてないけど長くても1ヶ月ぐらいだろう)
※それだったら将来的に二段階認証を用意する場合に実装が楽になるかもしれない?
2段階認証のステップはセッション機能を使ってそのセッション内で二段階コードを入れる設計(有効期限は5~10分ぐらいがいいかな)
OAuthはOAuthで、認証を認可したらそのユーザに対するトークンを発行したりとかうんぬんかんぬん
教えて詳しい人。
Authorizationヘッダーにトークンを載っけるときはウェブアプリ用のトークンはjwt <トークン>、OAuthで認証したものはBearer <トークン>のように分けたほうが良さそう
※あとはOAuthのサーバーライブラリ次第
OAuthのデータベース構造
※認可コードかインプリシットでの認証と仮定する(どっちにするかはまだ明確に決めてないが、この2つにするのは絶対)。リフレッシュトークン(インプリシットの場合はトークン)の有効期限は認証時に決められるようにしたい(実装ライブラリが対応してれば)
クライアントテーブル
クライアントID(主キー)
必須。32文字固定のランダム文字にする予定
クライアントシークレット
必須。64文字分のバイト型で保管予定
クライアント名
必須?でも、アプリ名を表示する上で必要なのでこのシステムでは必須とする
オーナーUUID
任意。ログインしている状態で特定のAPIエンドポイントにPOSTしたらここにログインしているユーザーのUUIDが代入される
このUUIDに合致するユーザーはウェブアプリから削除も可能にする予定
リダイレクトURL
必須?一部サービスは複数にも対応しているところもあるので複数か単一かははっきりしてない
urn:ietf:wg:oauth:2.0:oobを指定したらリダイレクトせずに認可コードを表示する仕組みにする
利用規約・プライバシーポリシーURL
これは任意。サービスによってはこれがある(DiscordとかTwitter)。このシステムでも取り入れる予定
メールアドレスを提供する場合はこれらの設定を必須としたい
スコープ
任意。予め設定が必要なところもあるが、認証ページに行くときだけ設定するところもあるようだ
このシステムではテーブルには入れない予定
パブリックか(多分必要ない)
任意。falseだったらログインしているユーザーが所有者だったら認証できる
使ってるライブラリの関係で必要??
トークンテーブル