質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

OpenID Connect

OpenID Connectは、 様々なWebサイトや、 モバイルアプリなどを利用する際に一つのID情報のみで 認証を実現できるようにするID連携の仕組みです。

Q&A

解決済

1回答

2257閲覧

state,nonceの保存場所

kyokio

総合スコア560

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

OpenID Connect

OpenID Connectは、 様々なWebサイトや、 モバイルアプリなどを利用する際に一つのID情報のみで 認証を実現できるようにするID連携の仕組みです。

1グッド

2クリップ

投稿2022/12/27 15:39

state,nonceの保存場所

OAuthやOIDCを調べていてstate,nonceの保存場所について疑問が出てきたので質問させていただきます。

最初にstate,nonceのフォーマットについて調べていたところ、こちらの「Google nonce max length」という質問の回答で下記の回答がありました。(一部抜粋)

That being said I started digging around in the RFC for OAuth and the only mention I found worth wild would be the following. (My experience with the Google Oauth team says that they like to follow the RFC guidelines as they are accepted industry standard.)

15.5.2. Nonce Implementation Notes The nonce parameter value needs to include per-session state and be unguessable to attackers. One method to achieve this for Web Server Clients is to store a cryptographically random value as an HttpOnly session cookie and use a cryptographic hash of the value as the nonce parameter. In that case, the nonce in the returned ID Token is compared to the hash of the session cookie to detect ID Token replay by third parties. A related method applicable to JavaScript Clients is to store the cryptographically random value in HTML5 local storage and use a cryptographic hash of this value.

The fact that they suggest storing it in a session cookie would then lead to the max limit being at the very least the max size of a session cookie which would give us something like this.

上記回答ではRFCの資料でsession cookieで保存することを提案しているので制限がセッションクッキーの最大サイズになると書いてあります。画像は各ブラウザのクッキーの最大サイズなのでセッションクッキーとは別物だと思います。

セッションクッキーはブラウザ側のクッキーにセッションのIDのみを保存して値はサーバー側にセッション変数として保存するもとだと解釈しています。(セッション Cookie の概念)

その解釈で進めるとstate,nonceはセッション変数としてデータベースもしくはキャッシュ(Redisなど)に保存されるので回答の画像にあるブラウザのクッキーの最大サイズに依存しないと思います。

それともクッキーにセッションのIDと共にstate,nonceも入れてブラウザが保持するのでブラウザのクッキーの最大サイズに依存するのでしょうか?

mamama22👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

セッションクッキーという用語はおそらく厳密に定義されたものではないと思いますが、慣習的には「Expires属性が指定されていないCookie」という意味で使われます。以下は、Google Chromeの開発者ツールでCookieの値を表示しているところですが、Expires / Max-Ageの箇所に「Session」と表示されていることがわかります。これは、Expires属性が指定されておらず、ブラウザ終了と共に消えるCookieであることを示しています。

イメージ説明

ご指摘のように、セッションIDを保持するCookieのことを「セッションクッキー」と呼ぶ場合もあるとは思いますが、このケースでは文脈上そうではなく、Expires属性が指定されていないCookieのことを指していると思います。

投稿2022/12/28 04:43

ockeghem

総合スコア11705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kyokio

2022/12/28 11:39

ご回答ありがとうございます。 セッションクッキーという用語が厳密に定義されていないということを理解しまいした。 質問文で引用した回答(英語)で使われているセッションクッキーがExpire属性が指定されていないCookieのことを指しているとするとRFCの説明(回答者が引用している「15.5.2. Nonce Implementation...」の部分)を回答者は誤解しているのでしょうか? RFCではクッキーに暗号学的にランダムな値を入れて(=セッションID)その値の暗号学的ハッシュ値をノンスの値として使用する例を示しています。 > One method to achieve this for Web Server Clients is to store a cryptographically random value as an HttpOnly session cookie and use a cryptographic hash of the value as the nonce parameter. nonceはクッキーの値(=セッションID)のハッシュ値であるためクッキーに保持されずサーバーに保持されるため、上記部分を引用してブラウザのクッキーの最大サイズによると答えるのは間違っているように思いました。
ockeghem

2022/12/29 01:31

ちょっとここはおかしいと思います> 『クッキーの値(=セッションID)』 セッションIDは、クッキーの使い方の一つであって、全てではありません。いったんセッションIDのことは忘れましょう。セッションIDとはセッション管理に用いるPHPSESSID=XXXXXXXXXXXやJSESSIONID=XXXXXXXXXXXXXのことです。nonceとは直接関係ありません。 回答では、 乱数値 → HttpOnlyなセッションCookieに保存する 乱数値のハッシュ → nonceパラメータとして使用 ということですから、Cookieに保存されるのは乱数値の方であり、桁数は任意に選ぶことができます。ですが、乱数をむやみに長くする必要はなく、せいぜい数十バイトでしょうから、Cookieの長さ制限はクリティカルな問題になることは通常はありません。そして、それが通常Cookieの制限が話題にならない理由でもあると思います。 ちなみに、ですが、nonceの実装においては、HttpOnlyであることはセッションCookie(=Expire属性のないCoookie)であることも必須ではないので、これらはいずれもセキュリティ上の考慮だと思います。Expire属性のないCookieの方がわずかに安全と考えられています。どうせならSecure属性も書いておいたらよいのにと思いました。
kyokio

2023/01/26 16:14 編集

ご回答いただきありがとうございます。(通知を見落としていたので確認が遅くなってしまいました。) > ちょっとここはおかしいと思います.... PHPSESSID=XXXXXXXXXXXやJSESSIONID=XXXXXXXXXXXXXのことです。nonceとは直接関係ありません ↑こちらについて理解しました。 例として書かれているのは、 乱数値はHttpOnlyなクッキーとしての暗号学的なランダムな値であって、 それが=セッションIDとは書かれていませんでした。 > Cookieに保存されるのは乱数値の方であり、桁数は任意に選ぶことができます。ですが、乱数をむやみに長くする必要はなく、せいぜい数十バイトでしょうから、Cookieの長さ制限はクリティカルな問題になることは通常はありません。そして、それが通常Cookieの制限が話題にならない理由でもあると思います。 例のようにnonceをクッキーの乱数値のハッシュ値にする場合、 Cookieの長さ制限を考慮するのは乱数のみであり、nonceは特にCookieの長さ制限を考慮する必要はないということですね。 改めてご回答いただきありがとうございました。 書籍参考にさせていただいています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問