text: Title: Azure OAuth CSRF State Not Equal Error
  Body: If you'd like to report a bug in Flask-Appbuilder, fill out the template below. Provide
  any extra information that may be useful
  
  Responsible disclosure:
  We want to keep Flask-AppBuilder safe for everyone. If you've discovered a security vulnerability
  please report to danielvazgaspar@gmail.com.
  
  ### Environment
  
  Flask-Appbuilder version: 
  
  pip freeze output: Flask-Appbuilder version==4.1.4
  
  ### Describe the expected results
  
  We are currently running Airflow 2.4.3 on Kubernetes with the Airflow Community helm chart version 8.6.1 (located here: https://github.com/airflow-helm/charts).
  
  We have enabled Azure OAuth authentication for our webserver. This should bring up our webserver with an "login with azure" button and we should be able to click it and log in just fine. This is our webserver_config that we are using:
  
  ```
  from flask_appbuilder.security.manager import AUTH_OAUTH
  from airflow.www.security import AirflowSecurityManager
  import logging
  from typing import Dict, Any, List, Union
  import os
  import sys
  
  #Add this as a module to pythons path
  sys.path.append('/opt/airflow')
  
  log = logging.getLogger(__name__)
  log.setLevel(os.getenv("AIRFLOW__LOGGING__FAB_LOGGING_LEVEL", "DEBUG"))
  
  class AzureCustomSecurity(AirflowSecurityManager):
      # In this example, the oauth provider == 'azure'.
      # If you ever want to support other providers, see how it is done here:
      # https://github.com/dpgaspar/Flask-AppBuilder/blob/master/flask_appbuilder/security/manager.py#L550
      def get_oauth_user_info(self, provider, resp):
          # Creates the user info payload from Azure.
          # The user previously allowed your app to act on their behalf,
          #   so now we can query the user and teams endpoints for their data.
          # Username and team membership are added to the payload and returned to FAB.
          if provider == "azure":
              log.debug("Azure response received : {0}".format(resp))
              id_token = resp["id_token"]
              log.debug(str(id_token))
              me = self._azure_jwt_token_parse(id_token)
              log.debug("Parse JWT token : {0}".format(me))
              return {
                  "name": me.get("name", ""),
                  "email": me["upn"],
                  "first_name": me.get("given_name", ""),
                  "last_name": me.get("family_name", ""),
                  "id": me["oid"],
                  "username": me["oid"],
                  "role_keys": me.get("roles", []),
              }
  
  # Adding this in because if not the redirect url will start with http and we want https
  os.environ["AIRFLOW__WEBSERVER__ENABLE_PROXY_FIX"] = "True"
  WTF_CSRF_ENABLED = False
  CSRF_ENABLED = False
  AUTH_TYPE = AUTH_OAUTH
  AUTH_ROLES_SYNC_AT_LOGIN = True  # Checks roles on every login
  # Make sure to replace this with the path to your security manager class
  FAB_SECURITY_MANAGER_CLASS = "webserver_config.AzureCustomSecurity"
  # a mapping from the values of `userinfo["role_keys"]` to a list of FAB roles
  AUTH_ROLES_MAPPING = {
      "airflow_dev_admin": ["Admin"],
      "airflow_dev_op": ["Op"],
      "airflow_dev_user": ["User"],
      "airflow_dev_viewer": ["Viewer"]
      }
  # force users to re-auth after 30min of inactivity (to keep roles in sync)
  PERMANENT_SESSION_LIFETIME = 1800
  # If you wish, you can add multiple OAuth providers.
  OAUTH_PROVIDERS = [
      {
          "name": "azure",
          "icon": "fa-windows",
          "token_key": "access_token",
          "remote_app": {
              "client_id": "CLIENT_ID",
              "client_secret": 'AZURE_DEV_CLIENT_SECRET',
              "api_base_url": "https://login.microsoftonline.com/TENANT_ID",
              "request_token_url": None,
              'request_token_params': {
                  'scope': 'openid email profile'
              },
              "access_token_url": "https://login.microsoftonline.com/TENANT_ID/oauth2/v2.0/token",
              "access_token_params": {
                  'scope': 'openid email profile'
              },
              "authorize_url": "https://login.microsoftonline.com/TENANT_ID/oauth2/v2.0/authorize",
              "authorize_params": {
                  'scope': 'openid email profile',
              },
              'jwks_uri':'https://login.microsoftonline.com/common/discovery/v2.0/keys',
          },
      },
  ]
  ```
  
  ### Describe the actual results
  
  Instead, we are getting this error after we click the Azure button:
  
  
  [2022-11-28 22:04:58,744] {views.py:659} ERROR - Error authorizing OAuth access token: mismatching_state: CSRF Warning! State not equal in request and response. 
  airflow-web [2022-11-28 22:04:58,744] {views.py:659} ERROR - Error authorizing OAuth access token: mismatching_state: CSRF Warning! State not equal in request and response.
  
  
  ### Steps to reproduce
  
  Running Airflow 2.4.3 on Kubernetes with the Airflow Community helm chart version 8.6.1 and using the webserver_config file like above. When the webserver is running, you click on the "login to azure" button.
  
  ### Additional Comments
  
  I already posted an issue like this in the Airflow repo, and they said this could more then likely be a Flask problem, which is why I am making this issue here. If any other information is needed please let me know