最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

python - "MismatchingStateError in Google OAuth2 flow: CSRF Warning! State not equal in request and response"

programmeradmin2浏览0评论

I am working with Google's OAuth2 API and using the google-auth-oauthlib library in Python. However, I keep encountering a MismatchingStateError when trying to complete the OAuth2 authentication process. The error message is as follows:

Exception in thread Thread-1 (start_flow):
Traceback (most recent call last):
  File "C:\Users\eymen\AppData\Local\Programs\Python\Python313\Lib\threading.py", line 1041, in _bootstrap_inner
    self.run()
  File "C:\Users\eymen\AppData\Local\Programs\Python\Python313\Lib\threading.py", line 992, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\eymen\PycharmProjects\gmailtempapi\test2.py", line 77, in start_flow
    credentials = flow.run_local_server(port=port)
  File "C:\Users\eymen\PycharmProjects\gmailtempapi\.venv\Lib\site-packages\google_auth_oauthlib\flow.py", line 458, in run_local_server
    self.fetch_token(
  File "C:\Users\eymen\PycharmProjects\gmailtempapi\.venv\Lib\site-packages\google_auth_oauthlib\flow.py", line 285, in fetch_token
    return self.oauth2session.fetch_token(self.client_config["token_uri"], **kwargs)
  File "C:\Users\eymen\PycharmProjects\gmailtempapi\.venv\Lib\site-packages\requests_oauthlib\oauth2_session.py", line 271, in fetch_token
    self._client.parse_request_uri_response(
  File "C:\Users\eymen\PycharmProjects\gmailtempapi\.venv\Lib\site-packages\oauthlib\oauth2\rfc6749\clients\web_application.py", line 220, in parse_request_uri_response
    response = parse_authorization_code_response(uri, state=state)
  File "C:\Users\eymen\PycharmProjects\gmailtempapi\.venv\Lib\site-packages\oauthlib\oauth2\rfc6749\parameters.py", line 278, in parse_authorization_code_response
    raise MismatchingStateError()
oauthlib.oauth2.rfc6749.errors.MismatchingStateError: (mismatching_state) CSRF Warning! State not equal in request and response.

Problem: I am trying to automate the Google OAuth2 flow using playwright and google-auth-oauthlib. However, the flow fails due to a state mismatch during the authorization process, which leads to the CSRF error (MismatchingStateError). I am using a multithreaded approach to handle the OAuth2 flow, where the authentication response is obtained via Playwright in a separate thread. After the authorization URL is opened and credentials are provided, I encounter this issue.

Code: Here is the relevant code where the error occurs:

    try:
        flow = InstalledAppFlow.from_client_secrets_file(
            client_secrets_file,
            scopes=SCOPES)
        redirect_uri = f"http://localhost:{port}"
        flow.redirect_uri = redirect_uri
        auth_url, _ = flow.authorization_url()
        print(f"Opening browser for authorization of {email}")

        def start_flow(flow, port, event):
            global credentials
            credentials = flow.run_local_server(port=port)
            event.set()  


        event = threading.Event()
        flow_thread = threading.Thread(target=start_flow, args=(flow, port, event))
        flow_thread.start()
        with sync_playwright() as playwright:
            authorization_response = run(playwright, email, auth_url)

        event.wait()

The error is thrown during the flow.run_local_server() call, and it appears to be related to the state parameter in the OAuth2 request.

I am using playwright to automate the login process, and google-auth-oauthlib for handling OAuth2 tokens.

Question:

What could be causing the CSRF error and the mismatching state parameter? How can I resolve this issue and successfully complete the OAuth2 authentication process?

Any help would be greatly appreciated!

Thank you!

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论