【问题标题】:Django OAuth - Include Authorization Header in Middleware?Django OAuth - 在中间件中包含授权标头?
【发布时间】:2020-05-18 22:43:37
【问题描述】:

我成功配置了 django-oauth-toolkit。我想在收到来自 OAuth 提供者的访问令牌后授权第三方用户。将它保存在 Django Admin 中后,我可以像这样使用它访问受限制的网站:

curl -H "Authorization: Bearer 123456" -X GET http://localhost:8000/secret/

我想象的架构是有一个登录页面,我可以在其中使用 Django 会话将授权令牌存储在标头中。但是,当我尝试在中间件中设置 Authorization 标头时,它不允许我访问该站点。我在访问该站点时检查了响应,看起来我根本没有保存标题。我尝试使用下面的代码。

class OAuthDt:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        def process_request(request):
            request.META['Authorization'] = "Bearer 123456"
            return(request)
        request.Authorization = "Bearer 123456"
        request = process_request(request)
        response = self.get_response(request)
        return(response) 

Views.py

@login_required()
def secret_page(request, *args, **kwargs):
    return HttpResponse('Secret contents!', status=200)

所以我的猜测是:

  1. 我的视图中的身份验证检查是在中间件保存 Header 之前完成的。
  2. 有些东西阻止我更新请求标头或覆盖我的标头。也许是另一个中间件

查看服务器日志后,我更倾向于数字 2。

[18/May/2020 13:54:38] "GET /secret/ HTTP/1.1" 302 0
This executes before redirecting user
Not Found: /accounts/login/
[18/May/2020 13:54:38] "GET /accounts/login/?next=/secret/ HTTP/1.1" 404 2362

这是我的中间件的顺序:

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'DtTranslator.middleware.OAuthDt',
    'oauth2_provider.middleware.OAuth2TokenMiddleware',
]

有什么建议吗?

【问题讨论】:

    标签: python django authentication oauth django-oauth


    【解决方案1】:

    在检查 Oauth 中间件之后,我只需要正确修改标头即可。

    request.META['HTTP_AUTHORIZATION'] = "Bearer 123456"
    

    【讨论】:

      猜你喜欢
      • 2021-02-10
      • 2012-06-19
      • 2016-07-31
      • 1970-01-01
      • 2013-01-21
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      • 2021-06-20
      相关资源
      最近更新 更多