Điểm:2

AccessDeniedHttpException trên tuyến đường có _access: TRUE

lá cờ iq

Trong mô-đun tùy chỉnh của mình, tôi có một vài tuyến "xuất bản" không cần bất kỳ loại xác thực nào. Nhiều tháng trước, tôi đã biết rằng tôi có thể đạt được điều này với các yêu cầu sau trong định tuyến.yml:

my_module.myroute:
  […]
  yêu cầu:
    _truy cập: 'TRUE'

Điều này hoạt động trên các tuyến đường hiện tại của tôi.

Bây giờ tôi đang cố gắng thêm một cái mới để phân tích cú pháp ủy quyền tiêu đề HTTP chỉ cho mục đích nhận dạng: mục đích là hiển thị chế độ xem tùy chỉnh trên công cộng dữ liệu mà không cần bất kỳ xác thực hoặc ủy quyền nào. Vì vậy, tôi đã cố gắng tiếp cận tuyến đường tùy chỉnh của mình bằng cách thêm một ủy quyền tiêu đề (thông qua tiện ích mở rộng trình duyệt) và tôi gặp lỗi sau:

Đường dẫn: /CLS/it/pub/quadroxml. Symfony\Thành phần\HttpKernel\Ngoại lệ\AccessDeniedHttpException: 
Phương pháp xác thực được sử dụng không được phép trên tuyến đường này. 
trong Drupal\Core\EventSubscriber\AuthenticationSubscriber->onExceptionAccessDenied() 
(dòng 134 của [...]/core/lib/Drupal/Core/EventSubscriber/AuthenticationSubscriber.php).

Vì vậy, gửi một ủy quyền tiêu đề dường như kích hoạt một số phương thức xác thực ngay cả trên các tuyến đường có _truy cập: 'TRUE'.

Tôi có thể vô hiệu hóa không hoàn toàn tất cả xác thực và ủy quyền trên một số tuyến đường? Ngoài ra, tôi có thể bật "phương thức xác thực đã sử dụng" trên tuyến đường của mình và sau đó chấp nhận bất kỳ mật khẩu nào không? (Tôi chỉ quan tâm đến id người dùng!)

Điểm:1
lá cờ cn

Tôi không chắc về cách chấp nhận bất kỳ mật khẩu nào. Nhưng có một sự khác biệt giữa xác thực người dùng mặc định và cơ bản_auth bạn có thể đang sử dụng cho tuyến đường này. Cái đầu tiên được định nghĩa là toàn cầu:

lõi/mô-đun/người dùng/user.service.yml

user.authentication.cookie:
    lớp: Drupal\user\Authentication\Provider\Cookie
    đối số: ['@session_configuration', '@database', '@messenger']
    thẻ:
      - { tên: xác thực_nhà cung cấp, nhà cung cấp_id: 'cookie', mức độ ưu tiên: 0, toàn cầu: TRUE }

trong khi cái thứ hai thì không:

lõi/mô-đun/basic_auth/basic_auth.services.yml

dịch vụ:
  basic_auth.authentication.basic_auth:
    lớp: Drupal\basic_auth\Authentication\Provider\BasicAuth
    đối số: ['@config.factory', '@user.auth', '@flood', '@entity_type.manager']
    thẻ:
      - { tên: xác thực_nhà cung cấp, nhà cung cấp_id: 'basic_auth', mức độ ưu tiên: 100 }

Trong trường hợp này, tuyến đường cần chỉ định _auth Tùy chọn. Nhìn thấy

https://www.drupal.org/docs/drupal-apis/routing-system/structure-of-routes

Francesco Marchetti-Stasi avatar
lá cờ iq
Chà, điều này thực sự không hoàn chỉnh, nhưng nó đưa tôi đi đúng hướng. Tôi hiểu rằng các nhà cung cấp xác thực có sẵn không phù hợp với nhu cầu của tôi, vì vậy tôi đã triển khai một nhà cung cấp tùy chỉnh. và sau đó tôi đã thêm nó vào tùy chọn `_auth`, như tôi đã đề xuất. Tôi nghĩ rằng điều này có thể xứng đáng với một câu trả lời mới và một nhận xét cho câu hỏi khác đưa tôi đi đúng hướng ...
4uk4 avatar
lá cờ cn
Tôi đã do dự khi đề xuất một nhà cung cấp xác thực tùy chỉnh vì chủ đề câu hỏi là định nghĩa tuyến đường. Nhưng việc hiển thị hai định nghĩa cốt lõi đã chỉ theo hướng đó và tất nhiên bạn cần có mức độ ưu tiên> 100 để ghi đè cả hai.
Francesco Marchetti-Stasi avatar
lá cờ iq
Vâng, thực sự nó đã chỉ đúng hướng. Tôi tò mò về tuyên bố của bạn về mức độ ưu tiên, có thể là nếu tôi sử dụng mức độ ưu tiên thấp thì các nhà cung cấp xác thực được xác định trước vẫn được sử dụng? Tôi hỏi bởi vì đó là những gì dường như đang xảy ra ...
4uk4 avatar
lá cờ cn
Nếu bạn đã bật Xác thực cơ bản HTTP và bạn đang gửi tiêu đề Ủy quyền, mô-đun này sẽ được sử dụng, trừ khi bạn triển khai nhà cung cấp xác thực tùy chỉnh có mức độ ưu tiên cao hơn. Việc xác thực xảy ra trước khi định tuyến. Sau khi định tuyến, nó chỉ kiểm tra xem nhà cung cấp đã thắng cuộc đua xác thực trước đó có phù hợp với tuyến hay không.
Francesco Marchetti-Stasi avatar
lá cờ iq
Tôi hiểu rồi. Điều đó giải thích mọi thứ tôi thấy.Tôi không tìm thấy hành vi này được ghi lại ở bất cứ đâu – nhưng có thể tôi chưa xem xét đủ sâu. Ngoài ra, tôi đoán rằng việc triển khai hành vi tùy chỉnh trên Xác thực cơ bản HTTP không thực sự là một yêu cầu phổ biến, đặc biệt là hiện nay... Dù sao, tôi nghĩ rằng _now_ điều này đã được ghi lại, _here_ :)
Điểm:0
lá cờ iq

Lấy cảm hứng từ câu trả lời @4k4, tôi đã triển khai nhà cung cấp xác thực tùy chỉnh, như chi tiết đây: triển khai mẫu được sử dụng trên trang đó chỉ kiểm tra sự hiện diện của tiêu đề, tôi chỉ cần thay thế X-Auth-Token với ủy quyền để lấy mã để làm những gì tôi cần.

Với một sửa chữa nhỏ, nhưng quan trọng: nếu tôi rời đi ưu tiên: 10 trong các thẻ của dịch vụ xác thực, tôi vẫn tiếp tục gặp lỗi tương tự khi tôi gửi ủy quyền tiêu đề trong yêu cầu. Tôi đã vật lộn với vấn đề này trong vài giờ, tra cứu và tìm kiếm trên Google; cuối cùng mắt tôi rơi vào ưu tiên: -10 giá trị của dịch vụ bộ xử lý đường dẫn mà tôi đã triển khai vài tháng trước, nơi tôi đã để lại nhận xét hữu ích "Hành động có mức độ ưu tiên thấp cuối cùng", vì vậy tôi đã thay đổi giá trị của mức độ ưu tiên thành 1000 và đột nhiên tôi quản lý để tuyến đường của mình hoạt động!

Tôi không hiểu chính xác tại sao điều này xảy ra vì tôi chỉ có nhà cung cấp xác thực tùy chỉnh của mình trong _auth véc tơ dưới tùy chọn, vì vậy tôi không hiểu làm thế nào một nhà cung cấp khác có thể nhận được mức độ ưu tiên cao hơn. Tôi nghĩ rằng đây có thể là một lỗi, tôi sẽ cố gắng tìm thời gian để sao chép nó trên một bản cài đặt sạch và gửi nó.

Bất cứ ai cần trợ giúp về vấn đề này cũng nên xem qua câu hỏi này: nó không giúp tôi nhiều vì vấn đề về mức độ ưu tiên không được đề cập, nhưng vì vấn đề hoàn toàn giống nhau nên có thể các gợi ý khác có thể được thu thập.

Điểm:0
lá cờ bd

Bạn có thể làm hầu hết mọi thứ bạn muốn khi nói đến kiểm soát truy cập, bằng cách xác định kiểm tra truy cập tùy chỉnh thông qua lớp trình điều khiển (1) mà bạn đặt trực tiếp trên tuyến đường cụ thể hoặc bằng cách tạo dịch vụ kiểm tra truy cập của riêng bạn (2).

1. Kiểm tra truy cập thông qua lớp điều khiển
Tài liệu: Kiểm tra truy cập tuyến đường tùy chỉnh

ví dụ.routing.yml

ví dụ:
  […]
  yêu cầu:
    _custom_access: '\Drupal\example\Controller\ExampleController::access'

Ví dụController.php

lớp Ví dụController {

  truy cập chức năng công khai(AccountInterface $account) {
    // Trả lại \Drupal\Core\Access\AccessResultInterface tại đây
  }

}

2. Dịch vụ kiểm tra truy cập
Tài liệu: Kiểm tra truy cập tuyến đường nâng cao

Về cơ bản, bạn làm điều tương tự cung cấp _quyền tham số mà bạn đã sử dụng (được triển khai bởi Trình kiểm tra truy cập mặc định. Vì vậy, bạn tạo một dịch vụ được gắn thẻ và đặt dịch vụ đó thành một yêu cầu trên tuyến đường của mình. Ví dụ từ các tài liệu rất đầy đủ, vì vậy tôi không sao chép nó ở đây.

Francesco Marchetti-Stasi avatar
lá cờ iq
Cảm ơn bạn, tôi đã thêm kiểm tra truy cập tuyến đường tùy chỉnh trong mô-đun của mình. Tôi đã cố gắng thêm một số khác cho đường dẫn mới này nhưng không có gì khác biệt: cuối cùng tôi đã giải quyết được vấn đề của mình bằng cách sử dụng nhà cung cấp xác thực tùy chỉnh, vì vậy tôi đoán vấn đề của mình là ở giai đoạn xác thực trước đó chứ không phải ở kiểm tra quyền truy cập giai đoạn.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.