質問: * どこから間違ってるのか分からないくらい、「ホントにこれ合ってるの?」という実装がとても多いです・・・ * APIトークンの生成に限らず、助言などをいただけると大変ありがたいです・・・ 宜しくお願いしますm(_ _)m 質問などあれば、随時返信・編集しますので、言っていただければと・・・
回答: > > APIトークンの素となる値がユーザーと同じテーブルに存在してていいのか > > > トークンで何ができるかによるかも トークンでユーザテーブルがみられるだけならトークンを分けても片方がもれればどちらももれるので分ける意味はないかと このトークンで他のもっとみられたくないテーブルアクセスもできるのであれば 分けることでユーザテーブルの情報はもれたけどもっと重要な情報は守られるということはあるかも > > これらを奪取されるのはまた別の次元の問題 > > > よくあるのはユーザ入力をクエリの中にいれてしまう いわゆるSQLインジェクションでクエリの脆弱性をつかれたときにトークンが流出してしまう あと Rails だとモデルとカラムが連携してるので検索した意図的に select しないと モデルに自動的にトークン情報も含まれるので めったにおきないエラーメッセージにレコードのダンプを返すようにしてそのまま忘れてたりとか それから一部サービス開発を第3社に提供する場合にユーザ情報はみてもいいけどトークンは見られたくないみたいな場合があるかどうか あるいはバイトや新人にテーブル操作はしてもいいけど認証情報はさわらせたくないとか 分けておいたほうがそういう細かい権限の設定やバグを回避できる場合もあるかも > > わざわざ暗号化が必要なのか > > > 暗号化というよりは環境を識別する必要があるかどうかではないですか たとえばステージングとプロダクションがあってステージングで作ったトークンで本番環境でアクセスできてしまうのがいいかどうか あるいは別サービスが同じデータベースを見ているとか それがかまわないのであれば暗号化する必要はないと思います 思いつくのはこのくらいです Rails だったら自分でトークン管理しなくても Gem いれて1行かくだけで使える認証システムがいくつかあるんじゃないかな 自分はいれたことがないので詳しくないですが