为什么授权 header 未包含在请求中? - 授权0
Why authorization header not included in request ? - Auth0
我已经为这个问题苦苦挣扎了两个星期,基本上我已经使用在本地主机上运行的 Flask 应用程序配置了 auth0 设置。
因此,我的 Flask 应用程序中有以下两个端点:
- 不需要身份验证过程的public端点:
@APP.route("/api/public")
@cross_origin(headers=["Content-Type", "Authorization"])
def public():
# No access token required to access this route
response = "Hello from a public endpoint! You don't need to be authenticated to see this."
return jsonify(message=response)
- 需要身份验证的专用端点:
@APP.route("/api/private")
@cross_origin(headers=["Content-Type", "Authorization"])
@cross_origin(headers=["Access-Control-Allow-Origin", "http://localhost:3000"])
@requires_auth
def private():
# A valid access token is required to access this route
response = "Hello from a private endpoint! You need to be authenticated to see this."
return jsonify(message=response)
所以这是以下场景:
- 我尝试使用 auth0 url 登录,它将我重定向到我的应用程序的通用登录页面。成功登录后,它将我重定向到私有端点,我收到 401 Un-authorized 错误。
每当我使用来自浏览器的有效令牌发出此请求时,它都会抛出 401 错误。
出于同样的原因,我使用邮递员调用此端点它有效!!
原因是来自浏览器的请求不包括授权 header,与 postman 不同。
我真的不明白为什么浏览器不包括授权header。
有人可以解释一下吗?
注意: 起初它在使用浏览器时没有任何问题,但突然出现了。
由于私有端点需要身份验证,每当我尝试访问私有端点时,都会调用此函数:
def get_token_auth_header():
"""Obtains the access token from the Authorization Header
"""
auth = request.headers.get("Authorization", None) # HERE IS THE PROBLEM OCCURRS
print("REQUEST HEADERS: \n", request.headers)
if not auth:
raise AuthError({"code": "authorization_header_missing",
"description":
"Authorization header is expected"}, 401)
parts = auth.split()
if parts[0].lower() != "bearer":
raise AuthError({"code": "invalid_header",
"description":
"Authorization header must start with"
" Bearer"}, 401)
elif len(parts) == 1:
raise AuthError({"code": "invalid_header",
"description": "Token not found"}, 401)
elif len(parts) > 2:
raise AuthError({"code": "invalid_header",
"description":
"Authorization header must be"
" Bearer token"}, 401)
token = parts[1]
return token
我已经为此苦苦挣扎了将近两个星期,我什么都试过了。
非常感谢您的帮助。
我在这里复制了我在 community forum 中提供的相同答案,以防您仍然需要它 ;)
您似乎缺少 authlib 配置 ;)
我已经为这个问题苦苦挣扎了两个星期,基本上我已经使用在本地主机上运行的 Flask 应用程序配置了 auth0 设置。
因此,我的 Flask 应用程序中有以下两个端点:
- 不需要身份验证过程的public端点:
@APP.route("/api/public")
@cross_origin(headers=["Content-Type", "Authorization"])
def public():
# No access token required to access this route
response = "Hello from a public endpoint! You don't need to be authenticated to see this."
return jsonify(message=response)
- 需要身份验证的专用端点:
@APP.route("/api/private")
@cross_origin(headers=["Content-Type", "Authorization"])
@cross_origin(headers=["Access-Control-Allow-Origin", "http://localhost:3000"])
@requires_auth
def private():
# A valid access token is required to access this route
response = "Hello from a private endpoint! You need to be authenticated to see this."
return jsonify(message=response)
所以这是以下场景:
- 我尝试使用 auth0 url 登录,它将我重定向到我的应用程序的通用登录页面。成功登录后,它将我重定向到私有端点,我收到 401 Un-authorized 错误。
每当我使用来自浏览器的有效令牌发出此请求时,它都会抛出 401 错误。 出于同样的原因,我使用邮递员调用此端点它有效!!
原因是来自浏览器的请求不包括授权 header,与 postman 不同。
我真的不明白为什么浏览器不包括授权header。
有人可以解释一下吗?
注意: 起初它在使用浏览器时没有任何问题,但突然出现了。
由于私有端点需要身份验证,每当我尝试访问私有端点时,都会调用此函数:
def get_token_auth_header():
"""Obtains the access token from the Authorization Header
"""
auth = request.headers.get("Authorization", None) # HERE IS THE PROBLEM OCCURRS
print("REQUEST HEADERS: \n", request.headers)
if not auth:
raise AuthError({"code": "authorization_header_missing",
"description":
"Authorization header is expected"}, 401)
parts = auth.split()
if parts[0].lower() != "bearer":
raise AuthError({"code": "invalid_header",
"description":
"Authorization header must start with"
" Bearer"}, 401)
elif len(parts) == 1:
raise AuthError({"code": "invalid_header",
"description": "Token not found"}, 401)
elif len(parts) > 2:
raise AuthError({"code": "invalid_header",
"description":
"Authorization header must be"
" Bearer token"}, 401)
token = parts[1]
return token
我已经为此苦苦挣扎了将近两个星期,我什么都试过了。
非常感谢您的帮助。
我在这里复制了我在 community forum 中提供的相同答案,以防您仍然需要它 ;)
您似乎缺少 authlib 配置 ;)