Go で RESTful API や JS フロントエンド アプリを構築している方は、認証をどのように管理していますか? 特定のライブラリやテクニックを使用していますか?
これについてほとんど議論されていないことに驚きました。私は次のような回答を念頭に置いて、独自の実装を開発しないようにしています。
全員が個別に独自のソリューションをコーディングしていますか?
ベストアンサー1
この質問は多くの閲覧数を獲得しており、人気のある質問バッジも付いています。そのため、このトピックには多くの潜在的な関心があり、多くの人がまったく同じことを質問していて、インターネット上で答えを見つけられていないことがわかります。
入手可能な情報のほとんどは、読者の「練習」として残された、手を振っているようなテキストに相当するものになります。;)
しかし、私はついに、golang-nuts メーリング リストのメンバーが (寛大に) 提供してくれた具体的な例を 1 つ見つけました。
https://groups.google.com/forum/#!msg/golang-nuts/GE7a_5C5kbA/fdSnH41pOPYJ
これは、カスタム認証の基礎として推奨されるスキーマとサーバー側の実装を提供します。クライアント側のコードは、引き続きユーザー次第です。
(投稿者がこれを見ていることを願っています: ありがとうございます!)
抜粋(および再フォーマット):
「次のようなデザインを提案します。
create table User (
ID int primary key identity(1,1),
Username text,
FullName text,
PasswordHash text,
PasswordSalt text,
IsDisabled bool
)
create table UserSession (
SessionKey text primary key,
UserID int not null, -- Could have a hard "references User"
LoginTime <time type> not null,
LastSeenTime <time type> not null
)
- ユーザーが TLS の POST 経由でサイトにログインするときに、パスワードが有効かどうかを判断します。
- 次に、ランダムなセッション キー (たとえば 50 個以上の暗号ランド文字) を発行し、安全な Cookie に保存します。
- そのセッション キーを UserSession テーブルに追加します。
- その後、そのユーザーを再度確認したら、まず UserSession テーブルにアクセスして、SessionKey が有効な LoginTime と LastSeenTime とともにそこに存在し、ユーザーが削除されていないかどうかを確認します。タイマーによって UserSession 内の古い行が自動的にクリアされるように設計することもできます。」