質問: OpenID2.0についての質問です。 ※OpenID Connectではありません。 OpenIDを利用した認証にて、 OP(OpenIDProvider)での初回認証後、そのユーザが既に認証済みということをRPはどのように判断するのでしょうか。 初回認証以降の話はOpenIDの仕様として定められていない認識です。 初回認証成功時にトークンを発行し、そのトークンをクライアント側がCookieなりlocalStorageなりに保持し、 リクエストの度にそのトークンを検証する形になるのでしょうか? SSOを実現する(異なるRPにて)場合は、どのような実装が必要になるのかイメージが湧きませんでした。 ご教示いただけますと幸いです。
回答: > > OP(OpenIDProvider)での初回認証後、そのユーザが既に認証済みということをRPはどのように判断するのでしょうか。 > > > このあたりは、 SAML, OpenID Connect でも同じ考え方だと思いますが、「そのユーザが既に認証済みということ」をRPは判定しません。 RP は、 OP に認証を委譲するだけです。すでに認証済みの場合のフローは以下のようになります。 1. RP が OP にリダイレクト(認証要求) 2. OP が Cookie を識別して、OPにログイン済みであることを確認 3. OP はユーザの身元保証をするアサーションをリダイレクトで返答 4. RP がアサーションを確認して、リソースへのアクセスを許可 RPはユーザがIDとパスワードを入力したかどうかを知りません。上記 2. のところはエンドユーザとOPとの間でのやり取りであり、RPは関与していません。ID、パスワードを入力したかどうかも知りません。ログイン操作をした場合でもログイン済みの場合でもアサーションを受け取るだけです。 SSOというのは、一度、ID、パスワードを入力すると、二度目はID、パスワードを入力しなくて良いということであり、その実装は OP に任されています(=SAML、OpenID の仕様では規定されていません)。最近は2要素認証、二段階認証など複雑な認証過程があり、SSOなのかどうなのかわかりにくいものがありますが、RPはその一切について責任をもっていないということです。