OpenID ConnectのRPを実装していた際、Authentication Requestでのパラメーターにstateとnonceの2つがあることに混乱してしまったので自分用まとめです。防ぎたい攻撃はそれぞれ別のようですがnonceだけで良くないか?と。 OpenID ConnectはOAuthの拡張 OpenID ConnectはOAuth 2.0でAPIを保護しつつ、クライアント上でのユーザー認証もできるようにした仕様です。そしてstateはOAuth 2.0由来のパラメーターで、nonceはOpenID Connect由来のパラメーターです。あくまでOpenID ConnectはOAuth 2.0の上に乗っかっている存在のため、たとえnonceでカバーできようとも互換性のためstateには手を出さなかったと考えることで似たようなパラメーターがある意味に納得することにしました。