2016-11-24 8 views
7

node.js(Hapiフレームワークを使用しています)では、私のアプリがユーザーアカウントを読むことを許可するためのリンクを作成しています。 Googleはそのリクエストを処理し、権限を与えるかどうか尋ねます。それから、GETパラメータをレスポンスコードとして私のサーバにリダイレクトします。ここに問題があります。リダイレクト後にChromeがクッキーを送信しない

Google ChromeはセッションIDでCookieを送信していません。

クッキーをCookie編集拡張のセッションクッキーとしてマークすると、それが送信されます。 PHPでも同じ動作ですが、セッションを作成するときにセッションとしてcookieをマークするので問題ありません。私はプラグインhapi-auth-cookieを使用しています。セッションを作成し、それに関するすべてを処理します。また、hapi-auth-cookieの設定で、HttpOnlyではないことをマークしています。これは、PHPセッションCookieを検査してnode.jsで検索したときに気づいた最初の違いでした。私はそれぞれのリダイレクトでレスポンス401が不足しています。私がアドレスバーにカーソルを置いてEnterキーを押すと、すべて正常に動作するので、リダイレクトの問題です。

私の質問は基本的には、その動作を引き起こしている可能性があります。一方、私はfirefoxが何の問題もなく各リクエストの後にクッキーを送信することを言及する必要があります。リダイレクト後

ヘッダ(セッションとクッキーなし):アドレスバーに入力して打った後

{ 
    "host": "localhost:3000", 
    "connection": "keep-alive", 
    "cache-control": "max-age=0", 
    "upgrade-insecure-requests": "1", 
    "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36", 
    "x-client-data": "CJS2eQHIprbJAQjEtskECKmdygE=", 
    "x-chrome-connected": "id=110052060380026604986,mode=0,enable_account_consistency=false", 
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", 
    "accept-encoding": "gzip, deflate, sdch, br", 
    "accept-language": "pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4" 
} 

ヘッダ(正常に動作するかを):

{ 
    "host": "localhost:3000", 
    "connection": "keep-alive", 
    "cache-control": "max-age=0", 
    "upgrade-insecure-requests": "1", 
    "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36", 
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", 
    "accept-encoding": "gzip, deflate, sdch, br", 
    "accept-language": "pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4", 
    "cookie": "SESSID=very_long_string" 
} 
+0

リダイレクトのコードを示してください。チェックする2つのこと:サイトのどこからでも見ることができるように、セッションクッキーにrootpathを設定していますか?リダイレクトは、Cookieが設定されているページとまったく同じドメイン/ポート/プロトコルになっていますか? – jfriend00

+0

はい、cookieにはpath:/があり、すべてのルートで正常に動作します。ユーザーヒットが許可された後、Googleが自分のサイトにリダイレクトするので、そのコードはありません。私はアドレスバーで入力してからクッキーを送ることができるので、理論的には大丈夫です。 Googleクロムは、Googleから のhttp:// localhost:3000/api?code = code_from_google' にリダイレクトした後にクッキーを送信していませんが、リンクをコピーして貼り付けても動作します。 –

答えて

4

この問題はHAPI-AUTHによって引き起こされます-cookieはまだisSameSite(Hapiの新機能)を扱っていません。手動で設定することができます。

const server = new Hapi.Server(
    connections: { 
     state: { 
      isSameSite: 'Lax' 
     } 
    } 
); 

しかし、デフォルトでは、あなたが'Strict'オプションを持っている、と考えて、多くの場合、あなたはその値を変更したくないかもしれませんしてください。

+0

SameSiteの 'Lax'を使って私の問題のインスタンスを解決しましたが、私は興味があります:' cookieAuth.set'→ 'reply.redirect'シーケンスを変更して、リダイレクトリクエストでクッキーを元に戻すにはどうしたらよいですか? 'isSameSite'は' Strict'ですか?リロードすると、クッキーが取得されます。 'set-cookie'ははっきりと働いています。リダイレクトが完全修飾されていても、ChromeはCookieをリダイレクトしても送信しないことに過ぎません。 –

+0

私は上記の質問のより完全な形式を['42216700']としました(http://stackoverflow.com/questions/42216700/how-can-i-redirect-after-oauth2-with-samesite-strict-と - まだ - 私のクッキーを取得する) –

関連する問題