Project

General

Profile

Bug(バグ) #2333

携帯版を SSL が必須なアプリケーションに登録している場合に携帯でログイン出来ない

Added by Shingo Yamada over 11 years ago. Updated almost 3 years ago.

Status:
Accepted(着手)
Priority:
Low(低め)
Assignee:
-
Target version:
Start date:
2011-08-03
Due date:
% Done:

0%

3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)

Description

Overview (現象)

config/OpenPNE.yml の ssl_required_applications に mobile_frontend を登録している場合に、携帯端末からの通常ログイン(メールアドレス, パスワードを使った認証)が出来ない。

上記設定の環境でログイン処理を行った場合、(リダイレクトが数回繰り返された後?)ログイン画面が再表示される。(エラーメッセージ無し。入力内容は保持されていない)

Causes (原因)

Way to fix (修正内容)


Related issues

Related to OpenPNE 3 - Bug(バグ) #2134: au の一部の端末でセッションが保持できない (ログインできない) New(新規) 2011-05-24

History

#1 Updated by Shingo Yamada over 11 years ago

  • 360対象 set to RC1

#2 Updated by Shingo Yamada over 11 years ago

  • Priority changed from Normal(通常) to High(高め)

#3 Updated by Shingo Yamada about 11 years ago

  • Assignee changed from Kousuke Ebihara to Yuya Watanabe

担当者を変更します。

#4 Updated by Yuya Watanabe about 11 years ago

  • Status changed from New(新規) to Accepted(着手)

#5 Updated by Yuya Watanabe about 11 years ago

本チケットに記載された情報をもとに手元の環境で再現を行おうとしましたが,報告された問題が確認できませんでした.以下に確認内容を示します.

確認環境

OpenPNE3.7.0-dev (master)
MacOSX 10.7.1
Firefox 6.0.2
FireMobileSimulator 1.2.2
  • DC P903i
  • AU W53CA
  • SB J-SH010
  • SB 930SH

確認手順

  1. OpenPNE3.7.0-devを通常通りインストールして管理画面で以下の設定を行う
    ・SNS設定->認証関連設定
    「PC・携帯両方から登録可」
    ・SNS設定->携帯関連設定
    「携帯電話のIP帯域をチェックしない」
  2. config/OpenPNE.ymlの編集を下記のように行う
    • use_sslをfalse, ssl_required_applicationsに"mobile_frontend"を含めない
    • use_sslをfalse, ssl_required_applicationsに"mobile_frontend"を含める
    • use_sslをtrue, ssl_required_applicationsに"mobile_frontend"を含めない
    • use_sslをtrue, ssl_required_applicationsに"mobile_frontend"を含める
  3. 「./symfony cc」を実行する
  4. Firefoxの「環境設定」->「プライバシー」->「履歴」の「サイトから送られてきたCookieを保存する」を以下のように設定する
    • チェックを入れる
    • チェックを外す
  5. Firefoxの「環境設定」->「プライバシー」->「履歴」の「Cookieを表示…」で「すべてのCookieを削除する」を行う
  6. クライアント側でFMSの機種を下記のように設定する
    • DC P903i
    • AU W53CA
    • SB J-SH010
    • SB 930SH
  7. OpenPNEのサイトの携帯版に下記のスキームでアクセスする
    • httpスキーム
    • httpsスキーム
  8. メンバのアドレス,パスワードを用いてログインしようとする
  9. ログインが完了しSNSのホームが表示されるかどうかを確認する

確認結果

Cooikeを保存しない設定の状態でAU W53CAおよびSB 930SHを用いてログインしようとした際に本チケットに記載された結果が得られました.他の設定の影響はありませんでした.その他状況においては正常にログインできたことを確認しました.この確認での懸念としては実機での確認は行っていないことが挙げられます.

#6 Updated by Yuya Watanabe about 11 years ago

au実機を用いた際に再現したことを確認しました.

au機においてCookieを使いながらSSLを用いる実装が困難だったため, #2341 と同様にau機でありconfig/OpenPNE.ymlのuse_sslがtrueである場合にセッションIDをURLパラメータで引き回す実装を行うことを検討しました.

#7 Updated by Yuya Watanabe about 11 years ago

調査結果

au実機でログイン出来ない状況について調査した結果を下記に記述します.

config/OpenPNE.yml内記述について.

  • 使用した実機はau機とsoftbank機
  • base_url, ssl_base_urlを設定
  • use_sslをtrueに設定
  • ssl_required_applicationsにはmobile_frontendを含まない
  • ssl_required_actionsにはデフォルトのままの状態である
    mobile_frontend: ["member/register", "member/registerInput", "member/registerEnd", "member/editProfile", "member/config", "member/login", "member/logout", "member/invite", "member/configUID"]
    

調査内容

dev環境で得られたログの一部を記載します.ログ開始はログイン画面を開いた状態でopAuthMailAddressによるログインで,
メールアドレスおよびパスワードが正しいものを入力したあとに「ログイン」ボタンをクリックしたところからとなります.
注目するところとしては最初のリダイレクトが発生した直後に認証に成功しているかどうかです.
au機の場合は最初のリダイレクト後に認証に失敗していますが,softbank機は最初のリダイレクト後に認証に成功しています.
つまり,リダイレクト時に認証情報が失われている可能性が考えられます.

  • au機
    Sep 18 16:31:42 symfony [info] {sfPatternRouting} Connect sfRoute "image_nodefaults" (/image/*)                        
    Sep 18 16:31:42 symfony [info] {sfPatternRouting} Connect sfRoute "image" (/cache/img/:format/:width_:height/:filename.:noice)
    Sep 18 16:31:42 symfony [info] {sfPatternRouting} Match route "login" (/member/login/*) for /member/login/authMode/MailAddress with parameters array (  'module' => 'member',  'action' => 'login',  'authMode' => 'MailAddress',)
     9月 18 16:31:43 symfony [info] {myUser} User is not authenticated
     9月 18 16:31:43 symfony [info] {myUser} User is not authenticated
     9月 18 16:31:43 symfony [info] {sfFilterChain} Executing filter "sfRenderingFilter" 
     9月 18 16:31:43 symfony [info] {sfFilterChain} Executing filter "opCacheControlFilter" 
     9月 18 16:31:43 symfony [info] {sfFilterChain} Executing filter "opCheckEnabledApplicationFilter" 
     9月 18 16:31:43 symfony [info] {sfFilterChain} Executing filter "sfBasicSecurityFilter" 
     9月 18 16:31:43 symfony [info] {sfFilterChain} Executing filter "sfDenyFromNonMobileFilter" 
     9月 18 16:31:43 symfony [info] {sfFilterChain} Executing filter "sfMobileIOFilter" 
     9月 18 16:31:43 symfony [info] {sfFilterChain} Executing filter "opEmojiFilter" 
     9月 18 16:31:43 symfony [info] {sfFilterChain} Executing filter "opExecutionFilter" 
     9月 18 16:31:43 symfony [info] {memberActions} Call "memberActions->executeLogin()" 
     9月 18 16:31:43 symfony [info] {myUser} User is not authenticated
     9月 18 16:31:43 symfony [err] {opDeprecatedRoute} This routing rule is deprecated. Please use other rules instead of this.
     9月 18 16:31:43 symfony [err] {opDeprecatedRoute} This routing rule is deprecated. Please use other rules instead of this.
     9月 18 16:31:43 symfony [info] {myUser} User is authenticated
     9月 18 16:31:43 symfony [info] {myUser} Add credential(s) "SNSMember" 
     9月 18 16:31:43 symfony [info] {opMobileFrontWebController} Redirect to "https://example.com:443/index.php/member/setSid?next_uri=member%2Fhome&is_remember_login=0&sid=skIkbgBcF0HZ5po9HGrvzISMjFgTuyaPqyiXDudY65I%3D&ts=1316331103" 
     9月 18 16:31:43 symfony [info] {opWebResponse} Send status "HTTP/1.1 302 Found" 
     9月 18 16:31:43 symfony [info] {opWebResponse} Send header "Location: https://example.com:443/index.php/member/setSid?next_uri=member%2Fhome&is_remember_login=0&sid=skIkbgBcF0HZ5po9HGrvzISMjFgTuyaPqyiXDudY65I%3D&ts=1316331103" 
     9月 18 16:31:43 symfony [info] {opWebResponse} Send header "Content-Type: text/html; charset=utf-8" 
     9月 18 16:31:43 symfony [info] {opWebResponse} Send content (241 o)
    Sep 18 16:31:44 symfony [info] {sfPatternRouting} Connect sfRoute "image_nodefaults" (/image/*)
    Sep 18 16:31:44 symfony [info] {sfPatternRouting} Connect sfRoute "image" (/cache/img/:format/:width_:height/:filename.:noice)
    Sep 18 16:31:44 symfony [info] {sfPatternRouting} Match route "member_setSid" (/member/setSid) for /member/setSid with parameters array (  'module' => 'member',  'action' => 'setSid',)
     9月 18 16:31:44 symfony [info] {myUser} User is not authenticated
     9月 18 16:31:44 symfony [info] {myUser} User is not authenticated
     9月 18 16:31:44 symfony [info] {sfFilterChain} Executing filter "sfRenderingFilter"                                   
     9月 18 16:31:44 symfony [info] {sfFilterChain} Executing filter "opCacheControlFilter" 
     9月 18 16:31:44 symfony [info] {sfFilterChain} Executing filter "opCheckEnabledApplicationFilter" 
     9月 18 16:31:44 symfony [info] {sfFilterChain} Executing filter "sfDenyFromNonMobileFilter" 
     9月 18 16:31:44 symfony [info] {sfFilterChain} Executing filter "sfMobileIOFilter" 
     9月 18 16:31:44 symfony [info] {sfFilterChain} Executing filter "opEmojiFilter" 
     9月 18 16:31:44 symfony [info] {sfFilterChain} Executing filter "opExecutionFilter" 
     9月 18 16:31:44 symfony [info] {memberActions} Call "memberActions->executeSetSid()" 
     9月 18 16:31:44 symfony [err] {opDeprecatedRoute} This routing rule is deprecated. Please use other rules instead of this.
     9月 18 16:31:44 symfony [err] {opDeprecatedRoute} This routing rule is deprecated. Please use other rules instead of this.
     9月 18 16:31:44 symfony [info] {opMobileFrontWebController} Redirect to "https://example.com:443/index.php/" 
     9月 18 16:31:44 symfony [info] {opWebResponse} Send status "HTTP/1.1 302 Found" 
     9月 18 16:31:44 symfony [info] {opWebResponse} Send header "Location: https://example.com:443/index.php/" 
     9月 18 16:31:44 symfony [info] {opWebResponse} Send header "Content-Type: text/html; charset=utf-8" 
     9月 18 16:31:44 symfony [info] {opWebResponse} Send content (108 o)
    
  • Softbank機
    Sep 18 16:34:31 symfony [info] {sfPatternRouting} Connect sfRoute "image_nodefaults" (/image/*)
    Sep 18 16:34:31 symfony [info] {sfPatternRouting} Connect sfRoute "image" (/cache/img/:format/:width_:height/:filename.:noice) 
    Sep 18 16:34:31 symfony [info] {sfPatternRouting} Match route "login" (/member/login/*) for /member/login/authMode/MailAddress with parameters array (  'module' => 'member',  'action' => 'login',  'authMode' => 'MailAddress',)
     9月 18 16:34:31 symfony [info] {myUser} User is not authenticated
     9月 18 16:34:31 symfony [info] {myUser} User is not authenticated
     9月 18 16:34:31 symfony [info] {sfFilterChain} Executing filter "sfRenderingFilter"                                   
     9月 18 16:34:31 symfony [info] {sfFilterChain} Executing filter "opCacheControlFilter"                                
     9月 18 16:34:31 symfony [info] {sfFilterChain} Executing filter "opCheckEnabledApplicationFilter"                     
     9月 18 16:34:31 symfony [info] {sfFilterChain} Executing filter "sfBasicSecurityFilter"                               
     9月 18 16:34:31 symfony [info] {sfFilterChain} Executing filter "sfDenyFromNonMobileFilter" 
     9月 18 16:34:31 symfony [info] {sfFilterChain} Executing filter "sfMobileIOFilter" 
     9月 18 16:34:31 symfony [info] {sfFilterChain} Executing filter "opEmojiFilter" 
     9月 18 16:34:31 symfony [info] {sfFilterChain} Executing filter "opExecutionFilter"                                   
     9月 18 16:34:31 symfony [info] {memberActions} Call "memberActions->executeLogin()"                                   
     9月 18 16:34:31 symfony [info] {myUser} User is not authenticated
     9月 18 16:34:31 symfony [err] {opDeprecatedRoute} This routing rule is deprecated. Please use other rules instead of this.  
     9月 18 16:34:31 symfony [err] {opDeprecatedRoute} This routing rule is deprecated. Please use other rules instead of this.  
     9月 18 16:34:31 symfony [info] {myUser} User is authenticated
     9月 18 16:34:31 symfony [info] {myUser} Add credential(s) "SNSMember"                                                 
     9月 18 16:34:31 symfony [info] {opMobileFrontWebController} Redirect to "https://example.com/index.php/member/setSid?next_uri=member%2Fhome&is_remember_login=0&sid=2BTNlCQFMp1kgb%2F9PWh2WRN8wK19aMiabl9xRG8xbb8%3D&ts=1316331271" 
     9月 18 16:34:31 symfony [info] {opWebResponse} Send status "HTTP/1.1 302 Found"                                       
     9月 18 16:34:31 symfony [info] {opWebResponse} Send header "Location: https://example.com/index.php/member/setSid?next_uri=member%2Fhome&is_remember_login=0&sid=2BTNlCQFMp1kgb%2F9PWh2WRN8wK19aMiabl9xRG8xbb8%3D&ts=1316331271" 
     9月 18 16:34:31 symfony [info] {opWebResponse} Send header "Content-Type: text/html; charset=utf-8"                   
     9月 18 16:34:31 symfony [info] {opWebResponse} Send content (239 o)
    Sep 18 16:34:32 symfony [info] {sfPatternRouting} Connect sfRoute "image_nodefaults" (/image/*)
    Sep 18 16:34:32 symfony [info] {sfPatternRouting} Connect sfRoute "image" (/cache/img/:format/:width_:height/:filename.:noice)
    Sep 18 16:34:32 symfony [info] {sfPatternRouting} Match route "member_setSid" (/member/setSid) for /member/setSid with parameters array (  'module' => 'member',  'action' => 'setSid',)
     9月 18 16:34:32 symfony [info] {myUser} User is authenticated
     9月 18 16:34:32 symfony [info] {myUser} Add credential(s) "SNSMember" 
     9月 18 16:34:32 symfony [info] {sfFilterChain} Executing filter "sfRenderingFilter"                                   
     9月 18 16:34:32 symfony [info] {sfFilterChain} Executing filter "opCacheControlFilter" 
     9月 18 16:34:32 symfony [info] {sfFilterChain} Executing filter "opCheckEnabledApplicationFilter" 
     9月 18 16:34:32 symfony [info] {sfFilterChain} Executing filter "sfDenyFromNonMobileFilter" 
     9月 18 16:34:32 symfony [info] {sfFilterChain} Executing filter "sfMobileIOFilter" 
     9月 18 16:34:32 symfony [info] {sfFilterChain} Executing filter "opEmojiFilter" 
     9月 18 16:34:32 symfony [info] {sfFilterChain} Executing filter "opExecutionFilter" 
     9月 18 16:34:32 symfony [info] {memberActions} Call "memberActions->executeSetSid()" 
     9月 18 16:34:33 symfony [err] {opDeprecatedRoute} This routing rule is deprecated. Please use other rules instead of this.
     9月 18 16:34:33 symfony [err] {opDeprecatedRoute} This routing rule is deprecated. Please use other rules instead of this.
     9月 18 16:34:33 symfony [info] {opMobileFrontWebController} Redirect to "https://example.com/index.php/" 
     9月 18 16:34:33 symfony [info] {opWebResponse} Send status "HTTP/1.1 302 Found" 
     9月 18 16:34:33 symfony [info] {opWebResponse} Send header "Location: https://example.com/index.php/" 
     9月 18 16:34:33 symfony [info] {opWebResponse} Send header "Content-Type: text/html; charset=utf-8" 
     9月 18 16:34:33 symfony [info] {opWebResponse} Send content (104 o)
    

#8 Updated by Yuya Watanabe about 11 years ago

note-7に続いて,下記状態においてssl利用時に認証情報が引き継がれているかどうかを確認しました.

config/OpenPNE.yml内記述について.

  • 使用した実機はau機
  • base_url, ssl_base_urlを設定
  • use_sslをtrueに設定
  • ssl_required_applicationsにはmobile_frontendを含まない
  • ssl_required_actionsから「member/login」を削除する
    mobile_frontend: ["member/register", "member/registerInput", "member/registerEnd", "member/editProfile", "member/config", "member/logout", "member/invite", "member/configUID"]
    

確認結果

この確認環境ではログインには成功しますが,他のSSLが必要である部分である「member/config」などのページを閲覧しようとすると「このページを見るにはログインが必要です」というメッセージとともにログイン画面へ遷移します.これによりSSLを用いるページとそうでないページで認証情報が共有できていないことが考えられます.

#9 Updated by Yuya Watanabe about 11 years ago

確認内容

Cookieが得られるかどうか.

確認環境について

  • FMSのau機と実機のau機の2つ
  • base_url, ssl_base_urlを設定
  • use_sslをtrueに設定
  • ssl_required_applicationsにはmobile_frontendを含まない
  • ssl_required_actionsに「member/home」を追加する
    mobile_frontend: ["member/home", "member/register", "member/registerInput", "member/registerEnd", "member/editProfile", "member/config", "member/login", "member/logout", "member/invite", "member/configUID"]
    
  • setSidにリダイレクトを通さないようににする
    diff --git a/lib/user/opSecurityUser.class.php b/lib/user/opSecurityUser.class.php
    index 7d66a46..0549e67 100644
    --- a/lib/user/opSecurityUser.class.php
    +++ b/lib/user/opSecurityUser.class.php
    @@ -259,20 +259,21 @@ class opSecurityUser extends opAdaptableUser
           $uri = $this->getAuthAdapter()->getAuthForm()->getValue('next_uri');
    
           // sharing session id between HTTP and HTTPS is needed
    -      $request = sfContext::getInstance()->getRequest();
    -      if (sfConfig::get('app_is_mobile', false)
    -        && sfConfig::get('op_use_ssl', false)
    -        && $request->isSecure()
    -        && ($request->getMobile()->isSoftBank() || $request->getMobile()->isEZweb())
    -      )
    -      {
    -        $item = $this->encryptSid(session_id());
    -
    -        $uri = '@member_setSid?next_uri='.$uri
    -             .'&is_remember_login='.(int)$this->getAuthAdapter()->getAuthForm()->getValue('is_remember_me')
    -             .'&sid='.$item[0]
    -             .'&ts='.$item[1];
    -      }
    +      //$request = sfContext::getInstance()->getRequest();
    +      //if (sfConfig::get('app_is_mobile', false)
    +      //  && sfConfig::get('op_use_ssl', false)
    +      //  && $request->isSecure()
    +      //  && ($request->getMobile()->isSoftBank() || $request->getMobile()->isEZweb())
    +      //)
    +      //{
    +      //  $item = $this->encryptSid(session_id());
    +
    +      //  $uri = '@member_setSid?next_uri='.$uri
    +      //       .'&is_remember_login='.(int)$this->getAuthAdapter()->getAuthForm()->getValue('is_remember_me')
    +      //       .'&sid='.$item[0]
    +      //       .'&ts='.$item[1];
    +      //}
    
           $this->setCulture($this->getMember()->getConfig('language', sfConfig::get('sf_default_culture')));
    
    
  • ヘッダーの中身を出力する
    diff --git a/lib/vendor/symfony/lib/filter/sfBasicSecurityFilter.class.php b/lib/vendor/symfony/lib/filter/sfBasicSecurityFilter.class.php
    index 6917fb0..dee88f3 100644
    --- a/lib/vendor/symfony/lib/filter/sfBasicSecurityFilter.class.php
    +++ b/lib/vendor/symfony/lib/filter/sfBasicSecurityFilter.class.php
    @@ -29,6 +29,13 @@ class sfBasicSecurityFilter extends sfFilter
        */
       public function execute($filterChain)
       {
    +    if (
    +      ('member' == $this->context->getModuleName()) && ('home' == $this->context->getActionName())
    +    )
    +    {
    +      var_dump(getallheaders());
    +      exit(0);
    +    }
         // disable security on login and secure actions
         if (
           (sfConfig::get('sf_login_module') == $this->context->getModuleName()) && (sfConfig::get('sf_login_action') == $this->context->getActionName())
    

結果

FMSのau機は以下のような項目が存在するが実機のau機には存在しなかった.

'Cookie' => string 'OpenPNE_mobile_frontend=9t3jqmoflbj5m19ovubg56nim4' (length=145)

#10 Updated by Kousuke Ebihara about 11 years ago

  • Assignee changed from Yuya Watanabe to Kousuke Ebihara

引き受けます

#11 Updated by Shingo Yamada about 11 years ago

  • 360対象 changed from RC1 to 3.6.0

#12 Updated by Kousuke Ebihara about 11 years ago

諸事情によって実機での一時的に確認ができなくなってしまったので、プロキシを用いて「HTTP と HTTPS 間で Cookie を共有しない」という状態を擬似的に作り出して再現を試みました。

このチケットを作成した時点の予測では、 setSid アクションに遷移する際に強制的に HTTP にリダイレクトしようとする場面でなんらかの問題があるものとあたりをつけていましたが、実際の挙動を確認すると、ログイン操作からホーム画面に遷移する間のすべてのリクエストは HTTPS に対しておこなわれています。ホーム画面が表示されるまでにアクセスした URL は以下の通りです。

https://example.com/index.php/member/login/authMode/MailAddress
https://example.com/index.php/member/setSid?next_uri=member%2Fhome&is_remember_login=0&sid=LwEBbzGuTIZhd6OFKdhdWtJ3wHbMaonRtGyzU64+YyA%3D&ts=1317215760
https://example.com/index.php/

これだけ見れば正常な挙動なように思います。OpenPNE の問題ではない可能性もでてきました。

#13 Updated by Mutsumi Imamura about 11 years ago

  • Target version deleted (OpenPNE 3.7.0)
  • 3.6 で発生するか deleted (Yes)
  • 360対象 deleted (3.6.0)

#note-12 の理由より、対応を見送ります。

#14 Updated by kaoru n over 7 years ago

  • 3.6 で発生するか set to Unknown (未調査)
  • 3.8 で発生するか set to Unknown (未調査)

#15 Updated by kaoru n over 7 years ago

  • Assignee deleted (Kousuke Ebihara)
  • Priority changed from High(高め) to Low(低め)

#16 Updated by kaoru n almost 3 years ago

  • Target version set to OpenPNE 3.10.x

Also available in: Atom PDF