在 Azure 中部署为 Web 应用程序,并添加我自定义购买的域名,我们将其称为“i-heart-java.com”。我将 URL 添加到 ALLOWED_HOSTS 和 CSRF_TRUSTED_ORIGINS 列表中,均为 https 和 http,包括额外的“www”。条目。应用程序在这些 URL 上成功拉起,并且我的页面在大多数情况下都可以正常工作,除非仅使用我的自定义域登录到应用程序的任何部分,否则登录可以使用天蓝色默认域正常工作。显示错误
2024-09-24T14:24:35.1649753Z Forbidden (Origin checking failed - https://www.i-heart-java.com does not match any trusted origins.): /admin/login/
我的设置如下,出于显而易见的原因,对真实姓名进行了清理:
ALLOWED_HOSTS = [
'https://127.0.0.1:8000',
'127.0.0.1',
'https://i-heart-java-XXX.eastus-0X.azurewebsites.net/',
"http://i-heart-java.com",
'https://i-heart-java.com/',
"http://www.i-heart-java.com",
'https://www.i-heart-java.com/',
..others..,
]
SESSION_COOKIE_SECURE = True
SECURE_SSL_REDIRECT = False
CORS_ALLOW_ALL_ORIGINS = True
CSRF_COOKIE_SECURE = True
CSRF_COOKIE_HTTPONLY = True
CSRF_USE_SESSIONS = False
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_TRUSTED_ORIGINS=[
"https://i-heart-java.com",
"http://i-heart-java.com",
"https://www.i-heart-java.com",
"http://www.i-heart-java.com",
..others..,
]
即使我的所有主机名和 URL 都位于正确的位置,但仅在通过自定义域登录时才可能导致 CSRF 触发?
会不会是自定义域名DNS? (请告诉我不)
我重新确认了 Azure Web 应用程序和我的域名托管服务商中的自定义域 DNS 设置。我还添加了我能想到的自定义域的各种 URL 格式。并且还尝试调整相关的CSRF和SSL设置
您不需要
http://
条目,除非您专门通过 http
和 https
为网站提供服务。如果您使用 SESSION_COOKIE_SECURE = True
和 CSRF_COOKIE_SECURE = True
强制执行 HTTPS,请仅关注 https
版本。
更新ALLOWED_HOSTS:
ALLOWED_HOSTS = [
'127.0.0.1',
'i-heart-java-XXX.eastus-0X.azurewebsites.net',
'i-heart-java.com',
'www.i-heart-java.com',
]
https://
中的完整方案(例如,CSRF_TRUSTED_ORIGINS
)。此外,如果需要,您必须包含子域的通配符。CSRF_TRUSTED_ORIGINS = [
"https://*.i-heart-java.com", # Wildcard for any subdomains
]
参考: