[GH-ISSUE #1545] web 服务加入 HTTP Basic Auth 认证后, 访问 web 时反复弹出认证界面, 反复填写设置的用户和密码后依然出现 #1221

Closed
opened 2026-05-05 12:46:59 -06:00 by gitea-mirror · 5 comments
Owner

Originally created by @pointworld on GitHub (Nov 30, 2019).
Original GitHub issue: https://github.com/fatedier/frp/issues/1545

What version of frp are you using (./frpc -v or ./frps -v)?
frps: 0.30.0
frpc: 0.30.0

What operating system and processor architecture are you using (go env)?
frps: CentOS 7.7 64位
frpc: Ubuntu16.04 64位

Configures you used:
frps.ini:

[common]
bind_port = 7000
vhost_http_port = 8080

frpc.ini:

[common]
server_addr = x.x.x.x
server_port = 7000

[web]
type = http
local_ip = y.y.y.y
local_port = 80
custom_domains = z.z.com
http_user = abc
http_pwd = abc

Steps to reproduce the issue:

  1. 启动 frps: ./frps -c frps.ini
  2. 启动 frpc: ./frpc -c frpc.ini

Describe the results you received:

  1. 未加入 HTTP Basic Auth 认证能正常访问 web 服务
  2. 加入 HTTP Basic Auth 认证后反复弹出认证界面, 多次输入用户和密码后依然如此, 导致服务不能正常访问
    Screen Shot 2019-11-30 at 10 48 27 AM
Originally created by @pointworld on GitHub (Nov 30, 2019). Original GitHub issue: https://github.com/fatedier/frp/issues/1545 **What version of frp are you using (./frpc -v or ./frps -v)?** frps: 0.30.0 frpc: 0.30.0 **What operating system and processor architecture are you using (`go env`)?** frps: CentOS 7.7 64位 frpc: Ubuntu16.04 64位 **Configures you used:** frps.ini: ```env [common] bind_port = 7000 vhost_http_port = 8080 ``` frpc.ini: ```env [common] server_addr = x.x.x.x server_port = 7000 [web] type = http local_ip = y.y.y.y local_port = 80 custom_domains = z.z.com http_user = abc http_pwd = abc ``` **Steps to reproduce the issue:** 1. 启动 frps: ./frps -c frps.ini 2. 启动 frpc: ./frpc -c frpc.ini **Describe the results you received:** 1. 未加入 HTTP Basic Auth 认证能正常访问 web 服务 2. 加入 HTTP Basic Auth 认证后反复弹出认证界面, 多次输入用户和密码后依然如此, 导致服务不能正常访问 <img width="450" alt="Screen Shot 2019-11-30 at 10 48 27 AM" src="https://user-images.githubusercontent.com/25301316/69894753-1ac28d00-135f-11ea-8657-2e313e797f3e.png">
Author
Owner

@fatedier commented on GitHub (Dec 1, 2019):

无法复现,测试正常。

<!-- gh-comment-id:560046294 --> @fatedier commented on GitHub (Dec 1, 2019): 无法复现,测试正常。
Author
Owner

@LHANDRH commented on GitHub (Dec 6, 2019):

原因是因为你的frpc.ini配置有错。
frpc.ini 中如果配置了
http_user = abc http_pwd = abc
说明你希望frp提供 HTTP Basic Auth (401认证)。
输入 abc/abc 认证只要通过,接下来浏览器的每一次请求都会在请求头头带上base64过的401长哈密码:
Authorization: Basic YWJjOmFiYw==
这就是401原理。
这时,你的WEB服务器也启用 HTTP Basic Auth ,但是账号密码不是abc/abc。。浏览器请求头中的认证信息不能被WEB服务器验证通过,因为你配置密码和frpc里设置的不同。。这时服务器响应的内容就是让浏览器再次弹出认证。。你接着输入了服务器的401,又和frpc配置的不一样。。frpc又让你输入。。。就是这样,一直死循环。。。。

<!-- gh-comment-id:562493421 --> @LHANDRH commented on GitHub (Dec 6, 2019): 原因是因为你的frpc.ini配置有错。 frpc.ini 中如果配置了 ` http_user = abc http_pwd = abc ` 说明你希望frp提供 HTTP Basic Auth (401认证)。 输入 abc/abc 认证只要通过,接下来浏览器的每一次请求都会在请求头头带上base64过的401长哈密码: ` Authorization: Basic YWJjOmFiYw== ` 这就是401原理。 这时,你的WEB服务器也启用 HTTP Basic Auth ,但是账号密码不是abc/abc。。浏览器请求头中的认证信息不能被WEB服务器验证通过,因为你配置密码和frpc里设置的不同。。这时服务器响应的内容就是让浏览器再次弹出认证。。你接着输入了服务器的401,又和frpc配置的不一样。。frpc又让你输入。。。就是这样,一直死循环。。。。
Author
Owner

@LHANDRH commented on GitHub (Dec 6, 2019):

无法复现,测试正常。

他一定是不能理解http_user,http_pwd就是相当于我们帮web服务器开了401。。
要不然,他不会说开了 HTTP Basic Auth 和关了HTTP Basic Auth了。。显然这样的词并没有出现在frp的帮助文档中。。肯定是这么回事..

<!-- gh-comment-id:562494761 --> @LHANDRH commented on GitHub (Dec 6, 2019): > 无法复现,测试正常。 他一定是不能理解http_user,http_pwd就是相当于我们帮web服务器开了401。。 要不然,他不会说开了 HTTP Basic Auth 和关了HTTP Basic Auth了。。显然这样的词并没有出现在frp的帮助文档中。。肯定是这么回事..
Author
Owner

@pointworld commented on GitHub (Dec 7, 2019):

原因是因为你的frpc.ini配置有错。
frpc.ini 中如果配置了
http_user = abc http_pwd = abc
说明你希望frp提供 HTTP Basic Auth (401认证)。
输入 abc/abc 认证只要通过,接下来浏览器的每一次请求都会在请求头头带上base64过的401长哈密码:
Authorization: Basic YWJjOmFiYw==
这就是401原理。
这时,你的WEB服务器也启用 HTTP Basic Auth ,但是账号密码不是abc/abc。。浏览器请求头中的认证信息不能被WEB服务器验证通过,因为你配置密码和frpc里设置的不同。。这时服务器响应的内容就是让浏览器再次弹出认证。。你接着输入了服务器的401,又和frpc配置的不一样。。frpc又让你输入。。。就是这样,一直死循环。。。。

我的 web 服务自身提供了 JWT 认证, 在 HTTP 请求头中占用了 Authorization: xxx , 再使用 HTTP Basic Auth 认证的话, 就会使得二者冲突. 原本初衷是想给服务再加上一层防护罩, 所以出现了这样的 bug, 自己也没有深究原因, 感谢您的解惑

<!-- gh-comment-id:562822464 --> @pointworld commented on GitHub (Dec 7, 2019): > 原因是因为你的frpc.ini配置有错。 > frpc.ini 中如果配置了 > `http_user = abc http_pwd = abc` > 说明你希望frp提供 HTTP Basic Auth (401认证)。 > 输入 abc/abc 认证只要通过,接下来浏览器的每一次请求都会在请求头头带上base64过的401长哈密码: > `Authorization: Basic YWJjOmFiYw==` > 这就是401原理。 > 这时,你的WEB服务器也启用 HTTP Basic Auth ,但是账号密码不是abc/abc。。浏览器请求头中的认证信息不能被WEB服务器验证通过,因为你配置密码和frpc里设置的不同。。这时服务器响应的内容就是让浏览器再次弹出认证。。你接着输入了服务器的401,又和frpc配置的不一样。。frpc又让你输入。。。就是这样,一直死循环。。。。 我的 web 服务自身提供了 JWT 认证, 在 HTTP 请求头中占用了 `Authorization: xxx` , 再使用 HTTP Basic Auth 认证的话, 就会使得二者冲突. 原本初衷是想给服务再加上一层防护罩, 所以出现了这样的 bug, 自己也没有深究原因, 感谢您的解惑
Author
Owner

@pointworld commented on GitHub (Dec 7, 2019):

无法复现,测试正常。

也希望作者能在文档中提到冲突的问题, 避免类似我这样对网络一知半解的其它道友也出现类似的问题

<!-- gh-comment-id:562822702 --> @pointworld commented on GitHub (Dec 7, 2019): > 无法复现,测试正常。 也希望作者能在文档中提到冲突的问题, 避免类似我这样对网络一知半解的其它道友也出现类似的问题
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: github-starred/frp#1221
No description provided.