我有一个apache服务器,需要进行身份验证,但是有一些调用需要允许所有人使用。
On off这些调用是基于查询字符串的,例如:
/foo/API.php?令牌= 123 &任务=工作内容&结果=json
我教了一个LocationMatch,这将工作,所以我制定了以下配置:
<LocationMatch ^/foo/api.php\?.*(Task=DoStuff).*>
Order Allow,Deny
Allow from All
</LocationMatch>
但这并不能让我通过认证(意味着我得到了一个401),如果我只是过滤^/foo/api.php
,我就通过了认证,但这还不够严格。
有人知道如何配置它来检查querystring中的Task参数吗?
对于身份验证,我们使用kerberos,这是在整个站点上强制执行的。这是我们的kerb配置。
LoadModule auth_kerb_module modules/mod_auth_kerb.so
<Directory /var/www/html>
Options FollowSymLinks
AllowOverride All
AuthType Kerberos
Require valid-user
AuthName "Kerberos Login"
KrbMethodNegotiate on
KrbMethodK5Passwd on
KrbAuthRealms FOO.LOCAL
KrbServiceName HTTP/server.foo.local@foo.LOCAL
Krb5KeyTab /etc/httpd/conf/http.keytab
Satisfy Any
Order deny,allow
Deny from all
Allow from 192.168.72.90
Allow from 192.168.72.91
Allow from 192.168.72.94
Allow from 192.168.72.95
Allow from 127.0.0.1
</Directory>
3条答案
按热度按时间k0pti3hp1#
如here所示:
、和Apache指令允许我们将身份验证/授权应用于具有高度特异性的特定模式的资源,但不能将控制权下放到查询字符串级别。
因此,您必须使用mod_rewrite来实现您的目标。
例如:
更新
您已声明:
如果我只是过滤^/foo/API.php,我就通过了认证,但这还不够严格。
然后,尝试将以下行添加到配置中:
rkkpypqq2#
在Apache2.4中,有一种更简单的方法可以做到这一点,而无需重写。
你可以使用
LocationMatch
来匹配QUERY_STRING
,然后使用If
块来匹配QUERY_STRING
的内容,例如:yx2lnoni3#
我们不能使用
<If %{QUERY_STRING} /a=b/>
,〈apache 2.4不支持它RewriteEngine On
RewriteCond %{QUERY_STRING} test=ok
RewriteRule ^/ - [E=checkParamTest:1]
<LocationMatch "^/"> Order allow,deny Allow from env=checkParamTest Satisfy any </LocationMatch>
<Location /> AuthType openid-connect Require valid-user ... </Location>