Я следую этому руководству для проверки подлинности GET
POST
& PUT
запросов на моем бэкэнде.На моем внешнем интерфейсе пользователь входит в Google .Всякий раз, когда они хотят получить доступ к API-интерфейсу сервера, они должны отправлять заголовки, где Authorization
- это токен внешнего объекта Google User (googleUser.getAuthResponse().id_token
).Затем мое приложение фляги гарантирует, что каждый запрос имеет действительный токен:
@BP.before_app_request
def default_login_required():
if not request.endpoint or request.endpoint.rsplit(".", 1)[-1] == "static":
return
view = current_app.view_functions[request.endpoint]
if getattr(view, "login_exempt", False):
return
valid, idinfo = token_verified(request.headers.get("Authorization"))
if valid:
return
msg = json.dumps(idinfo)
return Response(msg, mimetype="application/json", status=401)
def token_verified(token) -> Tuple[bool, Union[dict, str]]:
try:
idinfo = id_token.verify_oauth2_token(
token, requests.Request(), OAUTH2_CLIENT_ID
)
if idinfo["iss"] not in [
"accounts.google.com",
"https://accounts.google.com",
]:
raise ValueError("Wrong issuer.")
# If auth request is from a G Suite domain:
if idinfo["hd"] != "mycompany.com":
raise ValueError("Wrong hosted domain.")
logging.info(f"User {idinfo['email']} validated")
return True, idinfo
except ValueError as e:
msg = f"User is not validated, {str(e)}"
logging.info(msg)
return False, msg
Однако я бы хотел использовать секрет клиента где-нибудь для проверки этого запроса.Разве это не нужно?Я правильно сделал авторизацию?