如何解决为什么将Auth Radius模块和Login Form模块和Reverse Proxy使用到另一个App时,Apache Web Server两次提交请求
我有3层架构:
- A)身份验证提供程序-Radius服务器(主机名:radius-server.auth,端口:812)
- B)同时验证客户端+反向代理服务器( Apache Web服务器)??
- C)申请
这是流程:
- 用户访问
/login.html
的(B),输入其凭据并提交表格 - 表单提交重定向到
/authcheck
端点,在该端点使用模块半径根据身份验证提供程序(A)检查凭据。 - 如果可以,(B)允许访问
ProxyPass
网站。
这是其中的httpd.conf
Listen 8998
<VirtualHost *:8998>
# AddRadiusAuth server:port shared_secret timeout[:retries]
# Example server (change to fit your needs):
AddRadiusAuth radius-server.auth:1812 bigsecret 60:2
# AddRadiusCookieValid time_in_minutes
AddRadiusCookieValid 60
ProxyPass /login.html !
ProxyPassReverse /login.html !
ProxyPass /authcheck !
ProxyPassReverse /authcheck !
ProxyPass / http://sample-secure-app/
ProxyPassReverse / http://sample-secure-app/
ProxyPreserveHost On
ProxyRequests On
<Location />
AuthType Form
AuthName "Radius Authentication"
AuthFormProvider radius
# AuthFormLoginRequiredLocation "/login.html"
AuthFormLoginRequiredLocation /login.html?req=%{REQUEST_URI}
AuthFormLoginSuccessLocation "/"
AuthBasicAuthoritative Off
AuthRadiusAuthoritative on
# <minutes-for-which-cookie-is-valid>
AuthRadiusCookieValid 3
AuthRadiusActive On
require valid-user
Session On
# <maximum age in seconds for a session>
SessionMaxAge 120
# On https://httpd.apache.org/docs/trunk/mod/mod_session_cookie.html
# SessionCookieMaxAge Off
SessionCookieName session path=/
# SessionCookieName2 session path=/;domain=localhost;httponly;secure;version=1;
SessionCryptoPassphrase any-secret-passphrase
</Location>
<Location /authcheck>
SetEnvIf Referer ^.*req=(.*)&?$ req=$1
SetHandler form-login-handler
AuthType Form
AuthName "Radius Authentication"
AuthFormProvider radius
AuthFormLoginRequiredLocation "/login.html"
AuthFormLoginSuccessLocation %{ENV:req}
AuthBasicAuthoritative Off
AuthRadiusAuthoritative on
AuthRadiusCookieValid 3
AuthRadiusActive On
require valid-user
Session On
# <maximum age in seconds for a session>
SessionMaxAge 120
# SessionCookieMaxAge Off
SessionCookieName session path=/
# SessionCookieName2 session path=/;domain=localhost:8998;httponly;secure;version=1;
SessionCryptoPassphrase any-secret-passphrase
</Location>
<Location /login.html>
Require all granted
</Location>
RADIUS服务器(身份验证提供程序)有一些限制,由于它是由RSA服务器烤制的,因此两次都不接受密码。因此,密码为 RSA令牌密码(基于设备的身份验证)
因此,如果两次提交“登录”表单,则两次提交RSA密码(“密码”),从而使Auth提供者(A)拒绝访问。
这是我的事情,我意识到请求(表单提交)已经完成了两次。
为什么要重新提交?
我怀疑位置的冗余性,因为/authcheck
被两个位置覆盖:
-
<Location />
:涵盖所有链接,包括/authcheck
-
<Location /authcheck>
:封面/authcheck
我尝试将/authcheck
从一般的<Location />
中排除,我尝试了:
<Location ~ "^((?!/authcheck).)*$">
但同样的问题?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。