我配置了 nginx(现在它只列出目录)来检查请求中是否存在带有不记名令牌的标头:
授权:持有者#####
通过该方法实现nginx.conf
:
http {
///
# Mapping Bearer tokens
map $http_authorization $is_auth {
default false;
"Bearer #####" true;
}
///
server {
listen 443 ssl http2;
///
# Bearer authorization
if ($is_auth = false) {
return 401;
}
///
}
}
通过Postman或者curl访问服务器就可以了。但问题出现了:是否有可能以某种方式在浏览器中访问这样的服务器?
我尝试指定一个 URL 作为参数,但它不起作用 - 我希望它的工作方式类似于 URL 中的基本身份验证:http://username:[email protected]/
https://Authorization=%22Bearer%20TOKEN%[email protected]/
https://Authorization:%22Bearer%20TOKEN%[email protected]/
https://dev-1.su/?Authorization=%22Bearer%20TOKEN%22
https://dev-1.su/?Authorization:%22Bearer%20TOKEN%22
是否可以选择通过浏览器传输 Bearer 令牌?我需要为此配置 nginx 吗?
在 enSO 上, “基本 HTTP 和不记名令牌身份验证”问题的答案之一指出您可以使用 URI 参数
access_token
来传递不记名令牌:在我看来,
nginx
这个方法默认不起作用。但是,您可以编写一个额外的代码
map
来查找 URI 中的令牌:结果,nginx 将响应并传递以下 URI:
然而,正如@andreymal指出的那样- 浏览器使用基本身份验证,但不使用承载。因此,在目录中导航时,您必须添加
?authorization=TOKEN
.浏览器不会将承载令牌保留在内存中(与输入登录名和密码后的 Basic 不同)。因此,如果您确实需要通过浏览器提供访问权限,那么使用基本身份验证会更容易。此外,这种身份验证的设置也更加容易。