mpv系列のプレイヤーでBasic認証が突破できなくなった
tl;dr
マジでよくわかんないです 助けてください #help
libmpvにバグレポしていいの?
概要
dtv関連のリソースに対して、ブラウザではoauth2-proxyを使って認証をかけ、プレイヤーからはhttps://user:pass@dtv-resourcesのようにしてアクセスできるよう、oauth2-proxy と Basic 認証を併用するのような感じで固定パスワードでもアクセスできるようにしていた
https://gyazo.com/c68c83a63b48877531e64897c9a50ac0
それがここ数日でこれになった
画像はバックエンドにmpvを使っているiina
https://gyazo.com/6b64d383f8c687ea919154e73b15e5da
ヘッダーを見てみるとAuthorizationがない
多分本来は適切にURLを見てAuthorization Headerに変換するべき
https://gyazo.com/74a747c9e77983a62b42d011b39af5cb
VLCはきちんとURLを見てauthorizationをつけている
よくわからん
前までアクセスできていた点
急にAuthorizationヘッダが送られなくなった?そんなことある?
この場合はマジでバグだし、けどバグIssue見当たらないんだよな
前はbbb:bbb@もきちんと解釈されていた?nginxかoauth2-proxyに?
それっぽいCHANGELOGは見つけられず
RequestURLに含まれている場合がある、これってサーバ側でどう解釈するんだ
https://gyazo.com/6544fabf5cb503ffbd8989a455d2d27d
サーバに届いたリクエストではbbb:bbb@を解釈できない
本当に届いているのに見られない?
送ってすらいない?
暫定の回避策
nginxの$arg_tokenとかをset_proxy_header Authorization "Basic $arg_token"で割り当ててWUI側からクエリパラメータで渡すようにする
oauth2-proxyのreverse_proxy=trueの場合
proxy_passに対してoauth2-proxyを設定、upstreamに従来proxy_passを設定
code:oauthproxy.cfg
htpasswd_file = "/どっか/htpasswd"
code:nginx-oauth.conf
location / {
proxy_pass http://127.0.0.1:4180; # oauth2-proxy
set $auth $http_authorization;
if ($arg_basic) {
set $auth "Basic $arg_basic"; // ?basic=token -> Authorization: Basic token
}
proxy_set_header Authorization $auth;
}
auth_requestの場合
code:oauthproxy.cfg
htpasswd_file = "/どっか/htpasswd"
code:nginx-oauth.conf
location = /oauth2/auth {
proxy_pass http://127.0.0.1:4180;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
# nginx auth_request includes headers but not body
proxy_set_header Authorization $auth; // auth_request呼び出し元の$authが参照できる
proxy_set_header Content-Length "";
proxy_pass_request_body off;
}
location / {
set $auth $http_authorization;
if ($arg_basic) {
set $auth "Basic $arg_basic";
}
auth_request /oauth2/auth;
error_page 401 = /oauth2/sign_in;
}