1. ホーム
  2. authentication

[解決済み】Goの認証はどのように管理されているのでしょうか?[クローズド]

2022-04-12 08:35:02

質問

GoでRESTful APIやJSフロントエンドアプリを構築している方々は、どのように認証を管理していますか?何か特別なライブラリやテクニックを使っていますか?

この件に関する議論が少ないことに驚いています。私は以下のような回答を念頭に置き、自分自身の実装を開発しないように努めています。

ASP.Netの認証フォーム

皆さん、それぞれ別々にコーディングしているのでしょうか?

どのように解決するのか?

この質問にはたくさんのビューがあり、Popular Questionバッジもついています。ですから、このトピックには多くの潜在的な興味があり、多くの人がまったく同じことを質問しているのに、インターウェブ上で答えが見つかっていないことがわかります。

このような場合、「quot; exercise for the reader." 」として、手書きの波線に相当するテキストが残されています;)。

しかし、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.quotの古い行をクリアするように設計することができます。