2015-11-16 24 views
5

Tôi đang cố gắng để đáp ứng các yêu cầu sau (trong Apache HTTPD 2.2):Kết hợp Basic Authentication và LimitExcept trong Apache 2.2 Virtual Host

  • Nếu phương thức HTTP là bất cứ điều gì nhưng HEAD, POST, GET hoặc không cho phép truy cập, bất kể điều nào sau đây.
  • Nếu người dùng ở bên trong, hãy cho phép truy cập mà không có thử thách xác thực cơ bản.
  • Nếu người dùng ở bên ngoài, thử thách với xác thực cơ bản và cho phép họ có thông tin đăng nhập tốt hay không.

Đây là một trong rất nhiều những điều tôi đã cố gắng, nhưng không ai trong số những điều tôi đã cố gắng đạt được cả ba yêu cầu:

<Directory /path/to/wwwroot> 
    Options FollowSymLinks 
    AllowOverride FileInfo 

    # Basic Authentication 
    AuthType Basic 
    AuthName "Enter your site username and password." 
    AuthUserFile /path/to/stage.passwords 
    AuthGroupFile /path/to/stage.groups 
    Require group stageusers 

    # there's more logic for this variable in the real virtual_host. 
    # for this simplified example, manually set (using the following) 
    # or unset (using !internal_user). 
    SetEnv internal_user 

    Order deny,allow 
    Deny from all 
    Allow from env=internal_user 

    <LimitExcept HEAD POST GET> 
     Deny from all 
    </LimitExcept> 

    Satisfy all 

</Directory> 

Tôi đã đọc các tài liệu trên Satisfy, Giới hạn, LimitExcept, Đặt hàng và xác thực cơ bản, nhưng tôi gặp khó khăn khi đặt các phần lại với nhau.

Cách khả thi để thực hiện việc này là gì?

Trả lời

3

AFAICT trong Apache 2.2, bạn cần phải quay lại phương pháp "Thỏa mãn bất kỳ" sau đó xử lý kiểm tra phương thức bằng cách sử dụng mod_rewrite. Đây là tuyến đường tốt nhất vì kiểm tra phương pháp của bạn hoàn toàn độc lập.

Trong 2.4, Limit/LimitExcept được thay thế/đơn giản hóa bởi mod_allowmethods, nhưng yêu cầu cũng có thể kiểm tra trực tiếp phương pháp. Nó đơn giản hơn nhiều ở đó.

Phần viết lại khá đơn giản:

RewriteEngine ON 
RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|POST)$ 
RewriteRule .* - [F] 

Nhưng bạn sẽ cần phải chắc chắn rằng nó xuất hiện trong từng vhost + máy chủ chính có thể truy cập vào thư mục, không giống như các chỉ thị khác.

Đưa tất cả lại

# Only allow expected HTTP methods. 
RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|POST)$ 
RewriteRule .* - [F] 

<Directory /path/to/wwwroot> 
    Options FollowSymLinks 
    AllowOverride FileInfo 

    Satisfy any 

    # Basic Authentication 
    AuthType Basic 
    AuthName "Enter your site username and password." 
    AuthUserFile /path/to/stage.passwords 
    AuthGroupFile /path/to/stage.groups 
    Require group stageusers 

    # there's more logic for this variable in the real virtual_host. 
    # for this simplified example, manually set (using the following) 
    # or unset (using !internal_user). 
    SetEnv internal_user 

    Order deny,allow 
    Deny from all 
    Allow from env=internal_user 

</Directory> 
+0

Tôi đã không thể lấy lại cho công việc này đến ngày hôm nay. Tôi đã không bao giờ sử dụng một tiền thưởng trước đây, nhưng bây giờ tôi không thể thưởng nó * và * nó bị trừ khỏi đại diện của tôi. Tôi đoán có logic đằng sau hệ thống đó (mà tôi không hiểu). –

+0

không phải lo lắng lại: tiền thưởng – covener

Các vấn đề liên quan