Zammad: ๊ธฐ๋ณธ ์ธ์ฆ์— ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” HTTP 401 ์‘๋‹ต

์— ๋งŒ๋“  2020๋…„ 03์›” 24์ผ  ยท  12์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: zammad/zammad

์ •๋ณด :

  • ์ค‘๊ณ  Zammad ๋ฒ„์ „ : 3.2.0
  • ์„ค์น˜ ๋ฐฉ๋ฒ• (์†Œ์Šค, ํŒจํ‚ค์ง€, ..) : nginx rproxy ๋’ค์— Ruby 2.5.5๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์†Œ์Šค์—์„œ.
  • ์šด์˜ ์ฒด์ œ : Ubuntu 18.04.4 LTS (๋ฐ”์ด์˜ค๋‹‰)
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค + ๋ฒ„์ „ : postgres 9.5.21
  • Elasticsearch ๋ฒ„์ „ : 5.6.16
  • ๋ธŒ๋ผ์šฐ์ € + ๋ฒ„์ „ : Google Chrome 80.0.3987.132

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘ :

Zammad๋Š” ๊ธฐ๋ณธ ์ธ์ฆ ๊ณ„์ธต๊ณผ ์›ํ™œํ•˜๊ฒŒ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒํƒœ ์ฝ”๋“œ "HTTP 401 Unauthorized"๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์•ˆ์œผ๋กœ ์ƒํƒœ ์ฝ”๋“œ 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 ์ƒํƒœ ์ฝ”๋“œ ์ธ 401 Unauthorized์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ๋‹จ์ง€ ์ธ์ฆ์„์œ„ํ•œ ๊ฒƒ์ด์ง€ ์ธ์ฆ์„์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ์š”์ ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. Zammad๋Š” authorization ์˜ค๋ฅ˜์— 401์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ธฐ์ˆ ์ ์œผ๋กœ ์ž˜๋ชป๋˜์—ˆ์œผ๋ฏ€๋กœ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์—ด์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์˜ํ–ฅ์„ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋ชจ๋“  ๊ตฌํ˜„๊ณผ API ์†Œ๋น„์ž ๋•Œ๋ฌธ์— ํš๊ธฐ์ ์ธ ๋ณ€ํ™”๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
๋‚ด ํ˜„์žฌ ๊ณ„ํš์€ Zammad 3.4์—์„œ 401 authorization ๋ฅผ ์†Œํ”„ํŠธ ๋น„์ถ”์ฒœํ•˜๊ณ  3.5 (๋˜๋Š” 3.6)๋กœ ํ•˜๋“œ ๋น„์ถ”์ฒœํ•˜๊ณ  403์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋‚ด๋ถ€์ ์œผ๋กœ ๋” ๋…ผ์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ƒ๊ฐ?

๋ชจ๋“  12 ๋Œ“๊ธ€

์ •ํ™•ํ•œ ์„ค์น˜ ์ •๋ณด๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ฒซ ๋ฒˆ์งธ ๊ธฐ์‚ฌ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์‹ญ์‹œ์˜ค. "๋ชจ๋“ "์€ ํ˜„์žฌ๋กœ์„œ๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. :)

๋˜ํ•œ ์ „์ฒด ์›น ์„œ๋ฒ„ ๊ตฌ์„ฑ์„ ์ œ๊ณตํ•˜๊ณ  ์–ด๋–ค ๊ตฌ์„ฑ์„ ์‚ฌ์šฉ ์ค‘์ธ์ง€ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค. ์ง€๊ธˆ์€ ๊ธฐ์ˆ ์  ์ธ ์งˆ๋ฌธ๊ณผ ๊ฐ™์€ ๋ƒ„์ƒˆ๊ฐ€๋‚ฉ๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ์™„์ „ํžˆ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์„ ์œ„ํ•ด์„œ๋Š” ๋ชจ๋“  ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ;)

๊ฐ์‚ฌ.

์•ˆ๋…•ํ•˜์„ธ์š”,
๋ฌธ์ œ ์„ค๋ช…์„ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์–ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค!
๋ฒ ์ŠคํŠธ

์—…๋ฐ์ดํŠธ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์›น ์„œ๋ฒ„์˜ ๊ตฌ์„ฑ์€ ๊ธฐ๋ณธ ์ธ์ฆ์œผ๋กœ ํ™•์žฅ ๋œ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์ž…๋‹ˆ๊นŒ? ํ•ด๋‹น ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ ๊ตฌ์„ฑ๋„ ์ œ๊ณต ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ์ง€ ์•Š์€์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ.

๊ฐ์‚ฌ!

์˜ˆ, ๊ธฐ๋ณธ์ ์œผ๋กœ Zammad ๊ธฐ๋ณธ ๊ตฌ์„ฑ + ๊ธฐ๋ณธ ์ธ์ฆ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค.

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 (๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฃผ์–ด์ง„ ๊ธฐ๋ณธ ์ธ์ฆ ์ž๊ฒฉ ์ฆ๋ช…์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š๋‹ค๊ณ  ๋ฏฟ๊ฒŒ ํ•จ)์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๊ณ  HTTP 403 ๊ธˆ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ณธ๋‹ค๋ฉด ์ด๊ฒƒ์€

app / controllers / application_controller / handles_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 ๋˜๋Š” ์‚ฌ์šฉํ•˜๋ ค๋Š” ๋‹ค๋ฅธ ์›น ์„œ๋ฒ„์—์„œ ์ข…๋ฃŒ๋˜๊ณ  ํ™•์ธ๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๋ฅผ ์ „ํ˜€ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊ธฐ์ˆ ์ ์œผ๋กœ ์Šน์ธ๋˜์ง€ ์•Š์€ 401์€ ๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ๊ณผ ๋งž์Šต๋‹ˆ๋‹ค (๋‹น์‹ ์ด 403์„ ์›ํ•œ๋‹ค๊ณ  ์ดํ•ดํ•˜๋”๋ผ๋„).

๋˜ํ•œ๋ณด์‹ญ์‹œ์˜ค:
https://serverfault.com/questions/616770/nginx-auth-basic-401-htpasswd

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ  :
๋‹ค์‹œ ํ•œ ๋ฒˆ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด Zammad์˜ ๋ฐฑ์—”๋“œ๊ฐ€ ์‘๋‹ต ํ•  ์ˆ˜ ์—†๋„๋ก Zammad ํ”„๋ก์‹œ ๋ถ€๋ถ„์„ ์™„์ „ํžˆ ์ฃผ์„ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. 401์˜ ๊ฒฐ๊ณผ๋Š” ๋™์ผํ•˜๋ฏ€๋กœ nginx์˜ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. :)

์ด๊ฒƒ์€ ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹ˆ๋ผ ๊ธฐ์ˆ ์  ์ธ ์งˆ๋ฌธ์ด๋ฏ€๋กœ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @MrGeneration ,
์กฐ์‚ฌํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” Zammad ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์—ฌ์ „ํžˆ Ngnix๊ฐ€ ์•„๋‹Œ์ด ๋ฌธ์ œ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

ngnix๊ฐ€ ๊ธฐ๋ณธ ์ธ์ฆ์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๊ณ  ๊ฐ€์ • ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์šฐ๋ฆฌ ๋‘˜ ๋‹ค Zammad ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ (ngnix "๋’ค")์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์œ„์—์„œ ์–ธ๊ธ‰ ํ•œ ๊ตฌ์„ฑ์„ ngnix์— ์ถ”๊ฐ€ํ•˜์—ฌ ๊ธฐ๋ณธ ์ธ์ฆ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๋„ ์ธ์ฆ (๊ธฐ๋ณธ ๋ฐ Zammad ๋กœ๊ทธ์ธ)๊ณผ Zammad ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž์ฒด๋ฅผ ํฌํ•จํ•˜์—ฌ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒƒ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์•ž์„œ ์„ค๋ช…ํ•˜๋ ค๊ณ ํ–ˆ๋˜ ๋ฌธ์ œ๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ƒํƒœ ์ฝ”๋“œ๊ฐ€ 401 ์ธ ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋ง ํ•  ๋•Œ ๋‚˜์ค‘์— (Zammad!์— ์˜ํ•ด) ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.์ด ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์ธ์ฆ์ด ํ™œ์„ฑํ™” ๋œ _any webserver_๊ฐ€ ๊ฐ•์ œ๋กœ ๋กœ๊ทธ ์•„์›ƒ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์˜๋ฏธ ๋ก ์ ์œผ๋กœ ๋งํ•˜๋Š” 401์ด์ด ๊ฒฝ์šฐ์— "์ •ํ™•ํžˆ"๋“ค๋ฆฌ๋Š” ๊ฒƒ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ ์œผ๋กœ ๋งํ•˜๋ฉด ๊ธฐ๋ณธ ์ธ์ฆ์— ๋ถˆ๊ฐ€ํ”ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ 403์œผ๋กœ ๋Œ€์ฒดํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๋งŽ์€ ์‚ฌ์šฉ์ž์˜ Zammad ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ UX์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ์ด ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ์—ฌ์‹ญ์‹œ์˜ค.

@thorsteneckel ์ด๊ฒƒ์— ๋Œ€ํ•œ ๋‹น์‹ ์˜ ์˜๊ฒฌ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์–˜๋“ค ์•„! ๊ท€์ค‘ํ•œ ์ •๋ณด์™€ ์„ค๋ช…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. RFC๋ฅผ ์ฝ์—ˆ๊ณ  401๊ณผ 403์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์•ฝ๊ฐ„ ํ˜ผ๋ž€ ์Šค๋Ÿฌ์› ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ StackOverflow ์—์„œ์ด ํ›Œ๋ฅญํ•œ ์„ค๋ช… ์„ ๋ฐœ๊ฒฌ

์ธ์ฆ ์˜ค๋ฅ˜์— ๋Œ€ํ•œ HTTP ์ƒํƒœ ์ฝ”๋“œ ์ธ 401 Unauthorized์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ๋‹จ์ง€ ์ธ์ฆ์„์œ„ํ•œ ๊ฒƒ์ด์ง€ ์ธ์ฆ์„์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ์š”์ ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. Zammad๋Š” authorization ์˜ค๋ฅ˜์— 401์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ธฐ์ˆ ์ ์œผ๋กœ ์ž˜๋ชป๋˜์—ˆ์œผ๋ฏ€๋กœ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์—ด์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์˜ํ–ฅ์„ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋ชจ๋“  ๊ตฌํ˜„๊ณผ API ์†Œ๋น„์ž ๋•Œ๋ฌธ์— ํš๊ธฐ์ ์ธ ๋ณ€ํ™”๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
๋‚ด ํ˜„์žฌ ๊ณ„ํš์€ Zammad 3.4์—์„œ 401 authorization ๋ฅผ ์†Œํ”„ํŠธ ๋น„์ถ”์ฒœํ•˜๊ณ  3.5 (๋˜๋Š” 3.6)๋กœ ํ•˜๋“œ ๋น„์ถ”์ฒœํ•˜๊ณ  403์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋‚ด๋ถ€์ ์œผ๋กœ ๋” ๋…ผ์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ƒ๊ฐ?

์ข‹์€ ์†Œ์‹์ž…๋‹ˆ๋‹ค! ๋‚˜์—๊ฒŒ ์ข‹์€ ์†Œ๋ฆฌ.

์ตœ์‹  ์†Œ์‹์„ ๊ณ„์† ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ 4.0 ๋ฆด๋ฆฌ์Šค์—์„œ์ด๋ฅผ ๊ตฌํ˜„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด๋ถ€ ๊ตฌํ˜„ ๋ชฉ์  : https://thoughtbot.com/blog/forbidden-kisses-http-fluency-in-clearance

์œ„์˜ ์ปค๋ฐ‹์œผ๋กœ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ธฐํšŒ๋ฅผ ์žก๊ณ  401 ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ์ค‘ ์ผ๋ถ€๋ฅผ ๊ฐœ์„ ํ–ˆ์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณ€๊ฒฝ๋œ ์œ ์ผํ•œ ๊ฒƒ์€ ๋น„์ธ์ฆ ์˜ค๋ฅ˜๊ฐ€ 403 Forbidden ์ž…๋‹ˆ๋‹ค.

์ง€๊ธˆ๋ถ€ํ„ฐ ์•ฝ 30 ๋ถ„ ์•ˆ์— ์ตœ์‹  develop ํŒจํ‚ค์ง€๋กœ์ด๋ฅผ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ž‘๋™ํ•˜๋Š” ๋ถ„๊ธฐ์ด๋ฉฐ ์•ˆ์ •์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐฑ์—…์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ตœ์•…์˜ ์ƒํ™ฉ์„ ์˜ˆ์ƒํ•˜์‹ญ์‹œ์˜ค. :) ํ”ผ๋“œ๋ฐฑ์„ ๊ธฐ๋‹ค๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰