none
IE11のダイジェスト認証でログアウト(認証ダイアログでキャンセルボタンを押したことを検知する方法) RRS feed

  • 質問

  • IE11を使っています。

    ダイジェスト認証をかけています。

    ログアウト機能を持たせたいので、HTTPコード401ヘッダーを出力して認証ダイアログを出しています。

    ログアウトを行うという事はすでにログイン中なので認証ダイアログでキャンセルボタンを選択すると

    前のユーザーでログインしたままになってしまいます。

    キャンセルを押したことを検知する方法はないでしょうか?

    よろしくお願いいたします。



    2017年4月10日 3:24

回答

  • HTTP 401 は

    https://tools.ietf.org/html/rfc7235#section-3.1

    http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

    で仕様化されてますが、それを見る限り 401 で refuse された資格情報をキャッシュし続けるのは微妙に適切でない感じですね。401 で refuse されたら

    "The user agent MAY repeat the request with a new or  replaced Authorization header field "

    って書いてあります。


    hebikuzure

    • 回答としてマーク matukasa 2017年4月25日 0:50
    2017年4月13日 11:32
    モデレータ
  • よく理解できていないのかもしれませんが

    1. ユーザーがダイジェスト認証でサインインする
    2. サーバー側の何らかの理由でサインアウトさせたい
    3. HTTP 401 でレスポンスを返す
    4. ブラウザーで HTTP 401 を受けて認証ダイアログを出す
    5. ユーザーがダイアログでキャンセルを選択する

    というシナリオでしょうか?

     chrome では 401 が返ってきた時点でキャッシュしていたクレデンシャルを破棄するが、IE では破棄せず認証ダイアログで新しい資格情報が入力されれば置き換え、キャンセルしたらキャッシュしていたクレデンシャルを引き続き使う、という動作のように見える動きですね。
    どちらの動作が(HTTP の仕様的に)正しいのか分かりませんが(というか調べてませんが)、もしそういう動作であれば、「この方法はIEには使用できないということですね」は Yes ということでしょう。


    hebikuzure

    2017年4月10日 10:15
    モデレータ

すべての返信

  • Basic認証やDigest認証にはログアウトの概念がありません。ブラウザーが認証方法を送るか否かでしかありません。
    2017年4月10日 4:08
  • ご回答ありがとうございます。

    ログアウトの概念がないので401ヘッダーの出力を使って疑似的にログアウトしています。

    クロームではキャンセル押下=認証エラーになりますが

    IEでは認証のキャンセルになってしまうので困っています。

    >ブラウザーが認証方法を送るか否かでしかありません。

    ということは、この方法はIEには使用できないということですね。

    2017年4月10日 4:46
  • よく理解できていないのかもしれませんが

    1. ユーザーがダイジェスト認証でサインインする
    2. サーバー側の何らかの理由でサインアウトさせたい
    3. HTTP 401 でレスポンスを返す
    4. ブラウザーで HTTP 401 を受けて認証ダイアログを出す
    5. ユーザーがダイアログでキャンセルを選択する

    というシナリオでしょうか?

     chrome では 401 が返ってきた時点でキャッシュしていたクレデンシャルを破棄するが、IE では破棄せず認証ダイアログで新しい資格情報が入力されれば置き換え、キャンセルしたらキャッシュしていたクレデンシャルを引き続き使う、という動作のように見える動きですね。
    どちらの動作が(HTTP の仕様的に)正しいのか分かりませんが(というか調べてませんが)、もしそういう動作であれば、「この方法はIEには使用できないということですね」は Yes ということでしょう。


    hebikuzure

    2017年4月10日 10:15
    モデレータ
  • ご返信いただいた通りのシナリオです。

    >キャンセルしたらキャッシュしていたクレデンシャルを引き続き使う

    そのように見えます。

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




    2017年4月13日 4:20
  • HTTP 401 は

    https://tools.ietf.org/html/rfc7235#section-3.1

    http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

    で仕様化されてますが、それを見る限り 401 で refuse された資格情報をキャッシュし続けるのは微妙に適切でない感じですね。401 で refuse されたら

    "The user agent MAY repeat the request with a new or  replaced Authorization header field "

    って書いてあります。


    hebikuzure

    • 回答としてマーク matukasa 2017年4月25日 0:50
    2017年4月13日 11:32
    モデレータ