なるべく誤解がないようにしたかったのですが、長文になりました…。
ご参考になれば、幸いです。
OAuth2を使ったシステムでは、
認証の部分は昔ながらのユーザーテーブル管理(パスワードはハッシュするとか)のようにしているのでしょうか。
OAuth2やOpenID Connectの様な仕組みは、
**「IDとパスワードを他に漏らさずに、サービスを提供したい」**というような着想から出ています。
例えば、何かのゲームのプレイ内容をツイートしたいというような場合、
twitterのIDパスワードをそのゲームに管理させずにツイートさせる、
というイメージです。
先の例で、OAuth2を使用したとしますと、
「twitterは「○○ゲーム」より「ツイートの投稿」機能を要求されています。認可しますか?」
というような文面とともに、twitterのIDパスワードの入力フォームが出ると思います。
そして、この画面はtwitterの管理下にあるはずです。
何かのゲームの管理下の画面では無いはずです(IDとパスワードが他に漏れています)。
ですので、ご質問の
OAuth2を使ったシステムでは、
認証の部分は昔ながらのユーザーテーブル管理(パスワードはハッシュするとか)のようにしているのでしょうか。
は具体的には、
「OAuth2の認可の過程で行われる認証の為のIDパスワードは、サービスの使用側ではどのように管理しますか?」
という内容でしたら、
「管理しません」という事になるでしょうか。
また、OAuth2を使わずにログイン(そのサービス固有のアカウントでパスワードログイン)する場合と、
OAuth2でログインする場合では、
「認証」の部分は同じなのでしょうか。
OAuth2は「認可」の為の仕組みで「認証」の為の仕組みではありません。
「認証」の場合は、OAuth2を拡張したOpenID Connectが良いと思います。
OAuth2は、先ほどの例えでは、
何かのゲームに、
twitterの機能(ツイートの投稿)を利用する事を
「認可」する為の仕組みです。
これが認証として使われてしまっているのは、
認可する際に認証が行われており、
その認証が行われたという結果だけ流用し、
別サービス(例えば何かのゲーム)の認証としてみた、
という発想からでしょうか。
しかしながら、そこで行われた認証は、
本来、例えば、twitterのツイート投稿機能を利用する事を認可する為「だけに」行われた認証であって、
何かのゲームの為の認証ではありません。
つまり、twitterの機能を利用できる事をもって、
何かのゲームにログインできるというのは、
おかしな話だ、という事です。
ですので、ご質問の返信としましては
まず、OAuth2でログイン処理を書くべきではないでしょう。
OAuth2ではなく、OpenID Connectで書かれる場合でしたら、
「認証」の部分は同じなのでしょうか。
そこそこ違うものになるはずです。
データ構造ですが、
パスワードは、こちらでは用いないでしょう。
IDは、OpenID Connectの認証で得られる情報(subject等)と紐付けておく必要があるかと思います。
画面も、
「[twitterでログイン]ボタンを押す」
→「twitter側に飛ばされて、IDパスワードのフォームでログイン」
→「戻ってくる」
という風になりますので、ログインフォームを用意する必要はありません。
しかし、戻ってきた際に認証結果を取得するための処理が追加で必要です。
以降のセッションの発行や管理は同じかと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/31 09:54
2016/05/31 16:01
2016/06/01 00:21
2016/06/08 11:46
2016/06/09 00:15
2016/06/09 13:47