我想上传我的网站的开发分支,以便我可以将其展示给客户,并在尽可能接近生产的环境中进行测试(使用可能无法准备生产的代码)。因此我想密码保护这个网站。Nginx密码身份验证不断提示输入密码
我正在开发一个使用Django的网站,并使用nginx来为网站提供服务(使用uWsgi)。我设法得到提示输入密码应用下列指令:
auth_basic "Restricted Content"; # also tried "Private Property"
auth_basic_user_file /etc/nginx/.htpasswd;
但问题是,正确输入第一个密码后,就不断提示我要重新进行&密码;就好像每个API调用都需要被认证一样。
我认为这个问题可能与我的配置文件,所以这里是我的site.conf文件:
server {
listen 80;
server_name panel.mysite.dev;
root /path/to/my/app/front/dist;
### I've also tried 'auth_basic' here
location/{
root /path/to/my/app/front/dist;
index index.html;
auth_basic "Private Property";
auth_basic_user_file /etc/nginx/.htpasswd;
}
location /media {
rewrite ^(.*)$ http://media.mysite.dev$1;
}
location /static {
rewrite ^(.*)$ http://static.mysite.dev$1;
}
}
server {
listen 80;
server_name api.mysite.dev;
### I've also tried 'auth_basic' here
location /api {
client_max_body_size 25m;
uwsgi_pass unix:/tmp/api.mysite.dev.sock;
include /path/to/my/app/back/uwsgi_params;
}
}
server {
listen 80;
server_name media.mysite.dev;
root /path/to/my/app/media;
add_header 'Access-Control-Allow-Origin' '.*\.mysite\.[com|dev]';
location/{
root /path/to/my/app/media;
}
}
server {
listen 80;
server_name static.mysite.dev;
root /path/to/my/app/static;
if ($http_origin ~* (https?://.*\.mysite\.[com|dev](:[0-9]+)?)) {
set $cors "true";
}
location/{
if ($cors = "true") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
}
}
}
我的问题:有什么办法可以记得有一次输入的密码,并允许通过认证的用户可以轻松地导航?或者我错过了一些微不足道的东西?
编辑: 在我的Django settings.py
:
AUTHENTICATION_BACKENDS = (
'oauth2_provider.backends.OAuth2Backend',
'django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend',
)
...
REST_FRAMEWORK = {
...
DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
'oauth2_provider.ext.rest_framework.OAuth2Authentication',
),
非常感谢你提前。任何帮助将不胜感激
您的Django网站有没有机会使用HTTP身份验证,但使用不同的用户名和密码? (我问你是否写过“API调用”; Django REST框架确实支持[基本认证](http://www.django-rest-framework.org/api-guide/authentication/#basicauthentication))。 – Phillip
我不这么认为,但我不确定。我接受'TokenAuthentication'和'OAuth2Authentication'(我编辑了添加认证相关设置的问题以防万一)。是对的吗?或者我可以限制所有来自我的django配置的请求(不仅是那些需要身份验证的请求(我使用Django Rest Framework处理的请求),但是所有请求都考虑到我不希望该站点被暴露? – vabada
然后这就是你的冲突:基本的HTTP认证和TokenAuthentication都使用Authorization标头,如果他们看到另一个标头(从他们的角度来看,它是无效的),两者都会抱怨。是否SessionAuthentication是选项? – Phillip