none
ClickOnceアプリケーションと永続化Cookieのスライディングについて RRS feed

  • 質問

  • いつもお世話になってます。

    ClickOnceアプリをWebから配布する際に、永続化したCookieを利用して認証を行うことを想定したアプリを作成しています(永続化Cookieを利用するリスクはある程度考慮済み)。

     

    永続化Cookieの設定はASP.NETで作成したフォームより行い、永続化CookieのチェックはClickOnceアプリを配布するディレクトリにCookieをチェックするASP.NETモジュールを差し込んで行っています。

    この際に、永続化CookieがClickOnceのインストール時やアップデート時に自動的にクライアントからサーバへ送信されることは確認済みなのですが、アプリをスタートメニューから直接起動してWebのXXX.applicationへアクセスしたときにCookieの有効期限のスライディングが効かなくて困っています。

    Fiddlerの通信履歴からサーバからSet-Cookieが返信されていることは確認しているのですが、Set-Cookieに指定された内容がローカルに保存されないといった現象が発生しています。

    Webから起動した場合は、IEからWebのXXX.applicationへ一度アクセスするため、Set-Cookieが効いているのですが、ClickOnceローダから直接アクセスした場合にSet-Cookieの内容が保存されないように見受けられます。

     

    アプリ起動後にWCF等でサーバへアクセスし、Cookieの有効期限のスライディングを行うことも考えていますが、できればXXX.applicationへアクセスするさいに有効期限を自動的にスライディングしたいです。何か方法はありませんでしょうか?

     

    よろしくお願いします。

    • 移動 山本春海 2011年11月29日 0:58 より適切と思われるカテゴリに移動 (移動元:Windows Presentation Foundation ( WPF ))
    2011年11月28日 5:15

回答

  • ClickOnce では永続的なクッキーの送信には対応していますが、新たなクッキーを受信したり既存のクッキーをスライディングしたりする機能はないのでしょう。IE 経由の場合は、IE がいったんコンテンツを受け取りますので、その時にクッキーが IE によって更新されるため、うまく動いているように見えるだけではないかと思います。

    オフライン配置からの起動では、サポートされないとは明記はされています。

    http://msdn.microsoft.com/ja-jp/library/dd350113.aspx

     > ただし、ClickOnce は永続的な Cookie を使用します。この Cookie は Internet Explorer のキャッシュに格納され、
    > ハックされる可能性があるため、セキュリティ上のリスクがあります。
    > したがって、オフライン アプリケーションを配置する場合は、Windows NT 認証以外の認証シナリオはサポートされません。
    > 考えられる解決策は、すべてのユーザーにアプリケーションのインストールを許可し、クライアント アプリケーションの
    > 起動時に Web サービスによってユーザーを認証することです。

    ClickOnce による Windows 認証以外の認証方法としては、こちらも参考になるかと。

    http://msdn.microsoft.com/ja-jp/library/aa480721.aspx

     


    • 編集済み K. Takaoka 2011年11月29日 2:36 オフラインインストール → オフライン配置
    • 回答の候補に設定 山本春海 2011年12月7日 7:40
    • 回答としてマーク Yohei IWANO 2011年12月9日 8:10
    2011年11月29日 1:58

すべての返信

  • ClickOnce では永続的なクッキーの送信には対応していますが、新たなクッキーを受信したり既存のクッキーをスライディングしたりする機能はないのでしょう。IE 経由の場合は、IE がいったんコンテンツを受け取りますので、その時にクッキーが IE によって更新されるため、うまく動いているように見えるだけではないかと思います。

    オフライン配置からの起動では、サポートされないとは明記はされています。

    http://msdn.microsoft.com/ja-jp/library/dd350113.aspx

     > ただし、ClickOnce は永続的な Cookie を使用します。この Cookie は Internet Explorer のキャッシュに格納され、
    > ハックされる可能性があるため、セキュリティ上のリスクがあります。
    > したがって、オフライン アプリケーションを配置する場合は、Windows NT 認証以外の認証シナリオはサポートされません。
    > 考えられる解決策は、すべてのユーザーにアプリケーションのインストールを許可し、クライアント アプリケーションの
    > 起動時に Web サービスによってユーザーを認証することです。

    ClickOnce による Windows 認証以外の認証方法としては、こちらも参考になるかと。

    http://msdn.microsoft.com/ja-jp/library/aa480721.aspx

     


    • 編集済み K. Takaoka 2011年11月29日 2:36 オフラインインストール → オフライン配置
    • 回答の候補に設定 山本春海 2011年12月7日 7:40
    • 回答としてマーク Yohei IWANO 2011年12月9日 8:10
    2011年11月29日 1:58
  • K.Tanakaさん

    返信ありがとうございます。

    ご提示頂いたClickOnce周りのドキュメントは一通り目を通した上で、(サポートの有無は置いておいて)実装上可能そうだったので試したのですが、スライディングに関してはやはり駄目そうでした。

     

    ClickOnceアプリの配布自体を制御したい旨があるので、他の方法を含めてもう一度検討したいと思います。

    ありがとうございました。

    2011年12月9日 8:10
  • 状況を勘違いしていないなら、配布の制御とはちょっと違いますよね? オフライン実行で配布されてしまっているものを起動する時の話なので、配備のフェーズはすでに終わっているはずです。その場合の起動に関する話ですよね?

    起動の制御を配備と同時に行う場合は、オフライン実行をあきらめてオンライン実行にするのも1つの手だと思います。オンライン実行であれば、cookie の制御はブラウザによって行われるので期待した結果が得られますよね。

    オフライン実行で配布してしまったアプリケーションに対して、起動時にオンラインで承認をかませたいという要求に対して ClickOnce に機能を求めるのはちょっと無理があると思います。ClickOnce は配備を主とした機能なので、Web サービスなどを使ってアプリケーション内で制御を加えるのは妥当なところだろうと思います。

    オンラインで承認しないと実行できないアプリケーションを、オフライン実行させるという状況を考え直してみては?

     

    2011年12月10日 10:02