NanineO opened a new issue, #43592:
URL: https://github.com/apache/airflow/issues/43592

   ### Apache Airflow version
   
   2.10.2
   
   ### If "Other Airflow 2 version" selected, which one?
   
   _No response_
   
   ### What happened?
   
   After upgrading to version 2.10.2 (from 2.8.2) when logging out from the web 
UI, I get the following error:
   `"POST /logout/ HTTP/1.1" 405 463 "https://tst-airflow........./home"; `
   It might be that this error originates from our side. So, I wanted to avoid 
the POST-method. I am using Keycloak for authentication, and part of the code 
is this:
   ```
   from airflow.www.fab_security.manager import AUTH_OAUTH
   from airflow.providers.fab.auth_manager.security_manager.override import 
FabAirflowSecurityManagerOverride
   ...
         class CustomAuthRemoteUserView(AuthOAuthView):
           @expose("/logout/")
           def logout(self):
               """Delete access token before logging out."""
               return super().logout()
         class CustomSecurityManager(FabAirflowSecurityManagerOverride):
           authoauthview = CustomAuthRemoteUserView
   ```
   I hoped to solve my 405-463 error by overriding this new code in 
https://github.com/shahar1/airflow/blob/main/providers/src/airflow/providers/fab/auth_manager/security_manager/override.py
 :
   
   ```
   # The following logic patches the logout method within AuthView, so it 
supports POST method
   # to make CSRF protection effective. It is backward-compatible with Airflow 
versions <= 2.9.2 as it still
   # allows utilizing the GET method for them.
   # You could remove the patch and configure it when it is supported
   # natively by Flask-AppBuilder 
(https://github.com/dpgaspar/Flask-AppBuilder/issues/2248)
   if 
packaging.version.parse(packaging.version.parse(airflow_version).base_version) 
< packaging.version.parse(
       "2.10.0"
   ):
       _methods = ["GET", "POST"]
   else:
       _methods = ["POST"]
   
   
   class _ModifiedAuthView(AuthView):
       @expose("/logout/", methods=_methods)
       def logout(self):
           return super().logout()
   
   
   for auth_view in [AuthDBView, AuthLDAPView, AuthOAuthView, AuthOIDView, 
AuthRemoteUserView]:
       auth_view.__bases__ = (_ModifiedAuthView,)
   ```
   and to use my class CustomAuthRemoteUserView again. But I don't succeed. Is 
it even possible to override that new class _ModifiedAuthView?
   
   ### What you think should happen instead?
   
   I would have expected that my old override for logout still would work. I am 
afraid that the new class _ModifiedAuthView that has been added to __bases__ is 
dominating now.
   
   ### How to reproduce
   
   I think that viewing the code and overthinking how this newly added code for 
logout can be overridden will be sufficient.
   
   ### Operating System
   
   Kubernetes, via Helm-installation. (User Community, version 8.9.0)
   
   ### Versions of Apache Airflow Providers
   
   apache-airflow-providers-fab             1.3.0
   
   ### Deployment
   
   Other 3rd-party Helm chart
   
   ### Deployment details
   
   Helm chart from User Community, version 8.9.0
   
   ### Anything else?
   
   _No response_
   
   ### Are you willing to submit PR?
   
   - [ ] Yes I am willing to submit a PR!
   
   ### Code of Conduct
   
   - [X] I agree to follow this project's [Code of 
Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to