t_wの輪郭

Feedlyでフォローするボタン
にんしょう
あれ『【プログラマ英語】それ認証って意味じゃないですよ(厳密には)』Authentication→パスワードとか使って認証するやつPassport.jsのLocalStrategyで利用者名と暗証語を認証するコード『単なる OAuth 2.0 を認証に使うと、車が通れるほどのどでかいセキュリティー・ホールができる』LocalStrategyPassport.js認証方式『非技術者のためのOAuth認証(?)とOpenIDの違い入門』顔認証私署認証JWT認証Next.jsとAmplifyでcognitoの認証を実装Basic認証『passportを利用した認証を実装しよう』Digest認証生体認証個人認証保証協会の認証

あれ

2022/11/24 23:42:00

 手書き共有ウェブアプリ EGAKU(仮)の要件を考えている。


 成功基準が機能一覧になってんのが気に食わないな。事業としての成功基準を書いた方が良さげ。意識が作る側である下請けに引っ張られてる。下請け根性。


 成功基準に欲が出てきた。


 邪悪な仕様が生えてきた

画面下部にバナー広告を入れること
 手書き時の誤タッチによる収益増加目指す


 ちょっと緩和させる。主要な利用者が俺なので、俺が使うときに切れるようだったら下部バナーやめとく。

画面下部にバナー広告を入れること
 手書き時の誤タッチによる収益増加目指す
 あまりに邪悪な場合は画面上部とする


利用者登録・管理が可能なこと

 さらっと書いたけど、一等めんどくさいぞ


利用者登録・管理が可能なこと
利用者が過去に手書きした画像を一覧で表示できること
利用者が過去に手書きした画像を後から追記して手書きできること

 作るのがめんどくさい。なんとかしてこういう仕様を迂回したい。


 認証の作成を回避する仕様がなくはないけど、使いづらくなるな。あきらめて認証周りを作るか。
 認証作るのめんどちっちだから、Amazon Cognito使っちゃおうかしら。


50,000 アクティブユーザー/月が無料

 foooへいへーい。


 50,000 アクティブユーザー/月って、趣味プロダクトでこれだけいけたら大大大成功の部類では。

passport.use(new LocalStrategy(function verify(username, password, cb) {
  db.get('SELECT rowid AS id, * FROM users WHERE username = ?', [ username ], function(err, row) {
    if (err) { return cb(err); }
    if (!row) { return cb(null, false, { message: 'Incorrect username or password.' }); }

    crypto.pbkdf2(password, row.salt, 310000, 32, 'sha256', function(err, hashedPassword) {
      if (err) { return cb(err); }
      if (!crypto.timingSafeEqual(row.hashed_password, hashedPassword)) {
        return cb(null, false, { message: 'Incorrect username or password.' });
      }
      return cb(null, row);
    });
  });
}));

『Username & Password Tutorial: Verify Password』より


何をしているコードか

  1. dbから与えられた利用者名と一致する利用者情報(利用者名, ハッシュ化された暗証語)を取り出す。
  2. 与えられた暗証語crypto.pbkdf2sha256ハッシュ化する。
  3. crypto.timingSafeEqualで1.と2.で得られたハッシュ化された暗証語を比較し、一致していれば利用者情報をcallback関数(cb)で返す