Zammad๋ ๊ธฐ๋ณธ ์ธ์ฆ ๊ณ์ธต๊ณผ ์ํํ๊ฒ ํตํฉ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ํ ์ฝ๋ "HTTP 401 Unauthorized"๋ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ๋์์ผ๋ก ์ํ ์ฝ๋ 403์ด ์ ์ ํ ๋์ฒด์ ๋๋ค.
์ ๋ฐ์ ์ผ๋ก Zammad๋ ๊ธฐ๋ณธ ์ธ์ฆ๊ณผ ๊ฒฐํฉ ํ ๋ ๋ง์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ํ ์ฝ๋ 401๋ก ์์ฒญ์ ์๋ตํ๊ณ ํ์ฌ ์ฌ์ฉ์๊ฐ ๊ธฐ๋ณธ ์ธ์ฆ ์๊ฒฉ ์ฆ๋ช ์ ๋ค์ ์ ๋ ฅํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
์ฝ๋๋ฒ ์ด์ค์์ ์ํ 401 (๋๋ unauthorized
)์ ์ฝ๊ฒ ๊ฒ์ ํ ์ ์์ต๋๋ค.
https://github.com/zammad/zammad/search?l=Ruby&q=%3Aunauthorized
๊ทธ๋
๋๋
์, ์ด๊ฒ์ด ๋ฒ๊ทธ์ด๋ฉฐ ๊ธฐ๋ฅ ์์ฒญ์ด๋ ์ผ๋ฐ์ ์ธ ์ง๋ฌธ์ด ์๋๋ผ๊ณ ํ์ ํฉ๋๋ค.
์ ํํ ์ค์น ์ ๋ณด๋ฅผ ์ ์งํ๊ธฐ ์ํด ์ฒซ ๋ฒ์งธ ๊ธฐ์ฌ๋ฅผ ์ ๋ฐ์ดํธํ์ญ์์ค. "๋ชจ๋ "์ ํ์ฌ๋ก์๋ ์ ํฉํ์ง ์์ต๋๋ค. ์ฃ์กํฉ๋๋ค. :)
๋ํ ์ ์ฒด ์น ์๋ฒ ๊ตฌ์ฑ์ ์ ๊ณตํ๊ณ ์ด๋ค ๊ตฌ์ฑ์ ์ฌ์ฉ ์ค์ธ์ง ์๋ ค์ฃผ์ญ์์ค. ์ง๊ธ์ ๊ธฐ์ ์ ์ธ ์ง๋ฌธ๊ณผ ๊ฐ์ ๋์๊ฐ๋ฉ๋๋ค.ํ์ง๋ง ์์ ํ ํ์ธํ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์ํด์๋ ๋ชจ๋ ๊ฒ์ด ํ์ํฉ๋๋ค. ;)
๊ฐ์ฌ.
์๋
ํ์ธ์,
๋ฌธ์ ์ค๋ช
์ ์
๋ฐ์ดํธํ์ต๋๋ค. ์ฒ์์๋ ๋ฌธ์ ๊ฐ ์์ด์ ์ฃ์กํฉ๋๋ค!
๋ฒ ์คํธ
์ ๋ฐ์ดํธ ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์น ์๋ฒ์ ๊ตฌ์ฑ์ ๊ธฐ๋ณธ ์ธ์ฆ์ผ๋ก ํ์ฅ ๋ ๊ธฐ๋ณธ ๊ตฌ์ฑ์ ๋๊น? ํด๋น ๊ฐ์ ํธ์คํธ ๊ตฌ์ฑ๋ ์ ๊ณต ํ์๊ฒ ์ต๋๊น? ๋ด๊ฐ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์์ง ์์์ง ํ์ธํ๊ธฐ ์ํด์.
๊ฐ์ฌ!
์, ๊ธฐ๋ณธ์ ์ผ๋ก 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
ํจํค์ง๋ก์ด๋ฅผ ํ
์คํธ ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ์๋ํ๋ ๋ถ๊ธฐ์ด๋ฉฐ ์์ ์ ์ด์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ฐฑ์
์ด ์๋์ง ํ์ธํ๊ณ ์ต์
์ ์ํฉ์ ์์ํ์ญ์์ค. :) ํผ๋๋ฐฑ์ ๊ธฐ๋ค๋ฆฌ๊ฒ ์ต๋๋ค!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋ค ์! ๊ท์คํ ์ ๋ณด์ ์ค๋ช ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. RFC๋ฅผ ์ฝ์๊ณ 401๊ณผ 403์ ์ฐจ์ด์ ์ ๋ํด ์ฝ๊ฐ ํผ๋ ์ค๋ฌ์ ์ต๋๋ค. ๊ทธ๋ฌ๋ StackOverflow ์์์ด ํ๋ฅญํ ์ค๋ช ์ ๋ฐ๊ฒฌ
๊ทธ๊ฒ์ ์์ ์ ๊ฐ์ ธ์ต๋๋ค. Zammad๋
authorization
์ค๋ฅ์ 401์ ์ฌ์ฉํฉ๋๋ค. ์ด๊ฒ์ ๊ธฐ์ ์ ์ผ๋ก ์๋ชป๋์์ผ๋ฏ๋ก ๋ฒ๊ทธ์ ๋๋ค. ๋ฌธ์ ๋ฅผ ๋ค์ ์ด์ด ๋ณด๊ฒ ์ต๋๋ค.๊ทธ๋ฌ๋ ์ํฅ์ ํ์ธํด์ผํฉ๋๋ค. ๋๋ ์ด๊ฒ์ด ๋ชจ๋ ๊ตฌํ๊ณผ API ์๋น์ ๋๋ฌธ์ ํ๊ธฐ์ ์ธ ๋ณํ๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค.
๋ด ํ์ฌ ๊ณํ์ Zammad 3.4์์ 401
authorization
๋ฅผ ์ํํธ ๋น์ถ์ฒํ๊ณ 3.5 (๋๋ 3.6)๋ก ํ๋ ๋น์ถ์ฒํ๊ณ 403์ผ๋ก ์ ํํ๋ ๊ฒ์ ๋๋ค.๋ด๋ถ์ ์ผ๋ก ๋ ๋ ผ์ํด์ผํฉ๋๋ค.
์ด๊ฒ์ ๋ํ ์ถ๊ฐ ์๊ฐ?