我当前的设置包括以下内容:
1) React JS application (react.example.com:3000)
2) Flask server to serve backend API calls (backend.example.com:5000)
3) Authentication server using Django Rest Framework (auth.example.com)
我已将身份验证服务器配置为使用具有以下设置的会话身份验证:
SESSION_COOKIE_DOMAIN = '.example.com'
CORS_ALLOW_CREDENTIALS = True
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SAMESITE = None
SESSION_COOKIE_SECURE = False
CSRF_USE_SESSIONS = True
我还在Django中的 auth.example.com/check_auth 上设置了一个端点,以检查用户是否已通过身份验证
def authorization(request):
if request.user.is_authenticated:
return HttpResponse('User is Authenticated')
else:
return HttpResponse('Not Authenticated')
登录后,当我从ReactJS应用程序向端点发送GET请求时,我收到正确的响应“用户已通过身份验证”。效果很好。
axios.get('https://auth.example.com/check_auth', {withCredentials: true}).then(res => {
console.log(res)
})
但是,我想在我的Flask服务器中的某些端点内发送类似的请求,但无法正常工作。
例如:
@app.route('/check', methods=['GET'])
def check_auth():
res = requests.get('https://auth.example.com/check_auth')
return res.text
我登录并通过React应用程序将GET请求发送到 backend.example.com:5000/check 后,我希望返回的内容为“用户已通过身份验证”,但我却得到了“不”已验证”。
这似乎意味着当请求来自Flask时,设置为域'.example.com'的django会话cookie不会发送到Django身份验证服务器吗?
我对为什么会这样感到困惑,因为我认为在SESSION_COOKIE_DOMAIN中包含通配符会意味着我可以从React和Flask子域中进行身份验证。
任何帮助将不胜感激。谢谢!