Откуда секрет клиента входит в Google Auth на сервере? - PullRequest
0 голосов
/ 05 июля 2019

Я следую этому руководству для проверки подлинности 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

Однако я бы хотел использовать секрет клиента где-нибудь для проверки этого запроса.Разве это не нужно?Я правильно сделал авторизацию?

...