Zammad: 基本認蚌で問題を匕き起こすHTTP401応答

䜜成日 2020幎03月24日  Â·  12コメント  Â·  ゜ヌス: zammad/zammad

情報

  • 䜿甚枈みZammadバヌゞョン3.2.0
  • むンストヌル方法゜ヌス、パッケヌゞ、..nginxrproxyの背埌にあるRuby2.5.5を䜿甚した゜ヌスから。
  • オペレヌティングシステムUbuntu 18.04.4 LTSバむオニック
  • デヌタベヌス+バヌゞョンpostgres 9.5.21
  • Elasticsearchバヌゞョン5.6.16
  • ブラりザ+バヌゞョンGoogle Chrome 80.0.3987.132

予想される行動

Zammadは、基本認蚌のレむダヌずスムヌズに統合されたす。 したがっお、ステヌタスコヌド「HTTP401Unauthorized」は䜿甚されたせん。 別の方法ずしお、ステヌタスコヌド403が適切な代替手段になりたす。

実際の動䜜

党䜓ずしお、Zammadは、基本認蚌ず組み合わせた堎合、倚くの問題はありたせん。 ただし、芁求がステヌタスコヌド401で応答され、珟圚のナヌザヌが基本認蚌資栌情報の再入力を䜙儀なくされる堎合がいく぀かありたす。

コヌドベヌスでステヌタス401たたはunauthorized を簡単に怜玢できたす。
https://github.com/zammad/zammad/search?l=Ruby&q=%3Aunauthorized

動䜜を再珟する手順

  • Zammadむンスタンスを蚭定し、基本認蚌の背埌に配眮したす

その埌

  • 間違った資栌情報でログむンしおみおください
  • アプリケヌションはステヌタスコヌド401のペヌゞをレンダリングし、基本認蚌資栌情報の再入力を匷制したす

たたは

  • 個人1がアクセスできるグルヌプに割り圓おられたチケットを䜜成したす
  • 人1はそのチケットず察話したす
  • そのチケットを、個人1がアクセスできない別のグルヌプに移動したす
  • 個人1は、Zammadの抂芁で䞊蚘のチケットぞの401リク゚ストを匕き続き衚瀺し、基本認蚌からログアりトしたす。

はい、これはバグであり、機胜のリク゚ストや䞀般的な質問はないず確信しおいたす。

API bug verified

最も参考になるコメント

やあみんな 貎重な情報ず説明をありがずう。 RFCを読みたしたが、401ず403の違いに぀いおはただ少し混乱しおいたした。しかし、StackOverflowでこのすばらしい説明を芋぀けたした。 芋積もり

認蚌゚ラヌのHTTPステヌタスコヌドである401Unauthorizedに問題がありたす。 そしおそれはそれだけですそれは認蚌のためであり、承認のためではありたせん。

それがポむントになりたす。 Zammadはauthorization゚ラヌに401を䜿甚したす。 これは技術的に間違っおいるため、バグです。 問題を再開したす。

ただし、圱響を確認する必芁がありたす。 そこにあるすべおの実装ずAPIコンシュヌマヌのために、これは重倧な倉曎だず思いたす。
私の珟圚の蚈画は、Zammad3.4で401 authorizationを゜フト非掚奚にし、3.5たたは3.6でハヌド非掚奚にしお403に切り替えるこずです。
これに぀いおは、瀟内でさらに議論する必芁がありたす。

これに぀いおのさらなる考えは誰ですか

党おのコメント12件

正確なむンストヌル情報を保持するために最初の蚘事を曎新しおください-「any」は珟時点では実際には適切ではありたせん-申し蚳ありたせん。 :)

たた、完党なWebサヌバヌ構成を提䟛しおください䜿甚しおいるものをお知らせください。 今は技術的な質問のような匂いがしたすが、完党に確認したいず思いたす。 しかし、そのためにはすべおが必芁です。 ;

ありがずう。

たた䌚ったね、
問題の説明を曎新したした-最初は䞍足しお申し蚳ありたせん
ベスト

曎新しおいただきありがずうございたす。 Webサヌバヌの構成は、基本認蚌によっお拡匵されたデフォルトの構成ですか そのvhost構成も提䟛しおいただけたせんか 䜕かを芋逃しおいないこずを確認するためだけに。

ありがずう

はい、基本的にはZammad Default config + BasicAuthだけです。 これがvhost蚭定です

auth_basic 'Restricted: general basic auth';
auth_basic_user_file /etc/.htpasswd.d/zammad;
location /ws {
    proxy_pass  http://zammad_ws;
    proxy_redirect  off;
    proxy_hide_header X-Powered-By;
    proxy_set_header  Host              $host;
    proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto $scheme;
    proxy_set_header  X-Real-IP         $remote_addr;
    proxy_set_header  X-Forwarded-Host  $host;
    proxy_set_header  X-Forwarded-Port  443;
    proxy_set_header CLIENT_IP $remote_addr;
    proxy_read_timeout 86400;
    proxy_http_version 1.1;
    proxy_set_header  Upgrade           $http_upgrade;
    proxy_set_header  Connection        "upgrade";
    proxy_max_temp_file_size  0;
    error_page 502 503 504 =503 @fallback;
}
location / { 
    try_files $uri @proxy;
}
location <strong i="6">@proxy</strong> { 
    proxy_pass  http://zammad;
    proxy_redirect  off;
    proxy_hide_header X-Powered-By;
    proxy_set_header  Host              $host;
    proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto https;
    proxy_set_header  X-Real-IP         $remote_addr;
    proxy_set_header  X-Forwarded-Host  $host;
    proxy_set_header  X-Forwarded-Port  $server_port;
    proxy_http_version 1.1;
    proxy_set_header  Upgrade           $http_upgrade;
    proxy_set_header  Connection        "upgrade";
    proxy_max_temp_file_size  0;
    proxy_set_header CLIENT_IP $remote_addr;
    error_page 502 503 504 =503 @fallback;
}

もう䞀床調べたした。
私たちの掚枬Michaelが曞いたようには、HTTP 401を返すのではなくブラりザに、指定された基本認蚌資栌情報が正しくないず信じさせる、犁止されおいるHTTP403を返すこずです。

私がそれを正しく芋たなら、これは意味するでしょう

app / controllers / application_controller / handlers_errors.rbL39
respond_to_exception(e, :unauthorized)

に眮き換える必芁がありたす
respond_to_exception(e, :forbidden)

RFCによるず、ブラりザの動䜜は異なる必芁がありたすhttps://tools.ietf.org/html/rfc7231#section-6.5.3「リク゚ストで認蚌資栌情報が提䟛された堎合、サヌバヌはそれらがアクセスを蚱可するには䞍十分であるず芋なしたす。クラむアントはSHOULD同じ認蚌情報でリク゚ストを自動的に繰り返さないでください。」

ただし、先週の別のプロゞェクトで同じ問題が発生し、403の䜜業が発生したした。
403を返す他の問題が芋られない堎合は、PRを発行できたす。

ベスト

時間がかかっおすみたせん。
これはZammad関連の問題アプリケヌションベヌスではなく、nginxの「バック゚ンドの問題」であるこずに泚意しおください。

基本認蚌の認蚌芁求は、アプリケヌションずしおZammadに到達するこずはありたせんが、nginxたたは䜿甚する他のWebサヌバヌですでに終了しおいたすそしおチェックされおいたす。

したがっお、゜ヌスコヌドを倉曎しおも、問題はたったく解決しないず思いたす。
技術的には、401の無蚱可は、私が蚀えるこずから正しいです403が必芁だず理解しおいたすが。

参照
https://serverfault.com/questions/616770/nginx-auth-basic-401-htpasswd

ずころで
念のため、Zammadのバック゚ンドが応答できないように、Zammadプロキシパヌツを完党にコメントアりトしたした。 401の結果は同じであるため、nginxの障害です。 :)

これはバグではなく技術的な質問であるため、終了したす。

こんにちは@MrGeneration 、
これを調べおくれおありがずう。

この問題はZammadアプリケヌションの範囲倖のように思われるこずは理解しおいたすが、それでもNgnixではなくそれが原因であるず思いたす。 理由を説明しようず思いたす

ngnixが基本認蚌を䜿甚するように構成されおいないず仮定したしょう。 この堎合、私たち2人は、Zammadアプリケヌションngnixの「背埌」が正垞に機胜するこずに同意したす。

ここで、䞊蚘の構成をngnixに远加するこずにより、基本認蚌を有効にしたす。 珟圚でも、認蚌基本ログむンずZammadログむンずZammadアプリケヌション自䜓の䞡方を含め、ほずんどすべおが期埅どおりに機胜するこずに泚意しおください。

以前に説明しようずした問題は、アプリケヌションがステヌタスコヌド401のペヌゞをレンダリングするずきに、埌でZammadによっお発生するこずがありたす。この堎合、基本認蚌が有効になっおいる_すべおのWebサヌバヌ_は匷制的にログアりトしたす。

この堎合、意味的に蚀えば401が「ちょうどいい」ように聞こえるこずに同意したす。 技術的に蚀えば、基本認蚌で避けられない問題が発生するため、403に眮き換える必芁がありたす。
倚くのナヌザヌのZammadアプリケヌションのUXにも圱響を䞎える可胜性があるため、この問題を再床開いおください。

@thorsteneckelこれに぀いおどう思いたすか

やあみんな 貎重な情報ず説明をありがずう。 RFCを読みたしたが、401ず403の違いに぀いおはただ少し混乱しおいたした。しかし、StackOverflowでこのすばらしい説明を芋぀けたした。 芋積もり

認蚌゚ラヌのHTTPステヌタスコヌドである401Unauthorizedに問題がありたす。 そしおそれはそれだけですそれは認蚌のためであり、承認のためではありたせん。

それがポむントになりたす。 Zammadはauthorization゚ラヌに401を䜿甚したす。 これは技術的に間違っおいるため、バグです。 問題を再開したす。

ただし、圱響を確認する必芁がありたす。 そこにあるすべおの実装ずAPIコンシュヌマヌのために、これは重倧な倉曎だず思いたす。
私の珟圚の蚈画は、Zammad3.4で401 authorizationを゜フト非掚奚にし、3.5たたは3.6でハヌド非掚奚にしお403に切り替えるこずです。
これに぀いおは、瀟内でさらに議論する必芁がありたす。

これに぀いおのさらなる考えは誰ですか

それらは玠晎らしいニュヌスです 私にはいいですね。

垞に最新情報を入手するには次の4.0リリヌスでこれを実装したす。

内郚実装の目的 https 

䞊蚘のコミットで修正されたした。 チャンスを぀かんで401゚ラヌのメッセヌゞの䞀郚を改善したしたが、基本的に倉曎したのは、非認蚌゚ラヌを403 Forbiddenに倉曎したこずだけ

これは、最新のdevelopパッケヌゞを䜿甚しお、今から玄30分でテストできたす。 これは動䜜䞭のブランチであり、安定しおいないこずに泚意しおください。 したがっお、必ずバックアップを取り、最悪の事態を予想しおください:)フィヌドバックをお埅ちしおおりたす

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡