Score:2

AccessDeniedHttpException บนเส้นทางที่มี _access: TRUE

ในโมดูลที่กำหนดเองของฉัน ฉันมีเส้นทาง "การเผยแพร่" สองสามเส้นทางที่ไม่ต้องการการตรวจสอบสิทธิ์ใดๆ เมื่อหลายเดือนก่อนฉันได้เรียนรู้ว่าฉันสามารถทำได้โดยใช้ข้อกำหนดต่อไปนี้ใน routing.yml:

my_module.myroute:
  [...]
  ความต้องการ:
    _การเข้าถึง: 'จริง'

สิ่งนี้ใช้ได้กับเส้นทางที่มีอยู่ของฉัน

ตอนนี้ฉันกำลังพยายามเพิ่มอันใหม่ที่แยกวิเคราะห์ การอนุญาต ส่วนหัว HTTP เพื่อการระบุตัวตนเท่านั้น: จุดประสงค์คือเพื่อแสดงมุมมองที่กำหนดเอง สาธารณะ ข้อมูลโดยไม่ต้องมีการรับรองความถูกต้องหรือการอนุญาตใดๆ ดังนั้นฉันจึงพยายามเข้าถึงเส้นทางที่กำหนดเองโดยเพิ่ม การอนุญาต ส่วนหัว (ผ่านส่วนขยายของเบราว์เซอร์) และฉันได้รับข้อผิดพลาดต่อไปนี้:

เส้นทาง: /CLS/it/pub/quadroxml. Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException: 
ไม่อนุญาตให้ใช้วิธีการรับรองความถูกต้องที่ใช้บนเส้นทางนี้ 
ใน Drupal\Core\EventSubscriber\AuthenticationSubscriber->onExceptionAccessDenied() 
(บรรทัดที่ 134 ของ [...]/core/lib/Drupal/Core/EventSubscriber/AuthenticationSubscriber.php)

ดังนั้นการส่ง การอนุญาต เห็นได้ชัดว่าส่วนหัวทริกเกอร์วิธีการตรวจสอบสิทธิ์บางอย่างแม้ในเส้นทางด้วย _การเข้าถึง: 'จริง'.

ฉันสามารถปิดการใช้งาน อย่างสมบูรณ์ การรับรองความถูกต้องและการอนุญาตทั้งหมดในบางเส้นทาง? อีกทางหนึ่ง ฉันสามารถเปิดใช้งาน "วิธีการตรวจสอบที่ใช้แล้ว" บนเส้นทางของฉัน แล้วยอมรับรหัสผ่านใดๆ ได้หรือไม่ (ฉันสนใจเฉพาะรหัสผู้ใช้เท่านั้น!)

Score:1
ธง cn

ฉันไม่แน่ใจเกี่ยวกับวิธีรับรหัสผ่านใดๆ แต่มีความแตกต่างระหว่างการตรวจสอบผู้ใช้เริ่มต้นและ พื้นฐาน_auth คุณน่าจะใช้เส้นทางนี้ อันแรกถูกกำหนดให้เป็นสากล:

แกน/โมดูล/ผู้ใช้/ผู้ใช้.services.yml

user.authentication.cookie:
    คลาส: Drupal\user\Authentication\Provider\Cookie
    อาร์กิวเมนต์: ['@session_configuration', '@database', '@messenger']
    แท็ก:
      - { ชื่อ: authentication_provider, provider_id: 'cookie', ลำดับความสำคัญ: 0, ทั่วโลก: TRUE }

ในขณะที่อันที่สองไม่ใช่:

แกน/โมดูล/basic_auth/basic_auth.services.yml

บริการ:
  basic_auth.authentication.basic_auth:
    คลาส: Drupal\basic_auth\Authentication\Provider\BasicAuth
    อาร์กิวเมนต์: ['@config.factory', '@user.auth', '@flood', '@entity_type.manager']
    แท็ก:
      - { ชื่อ: authentication_provider, provider_id: 'basic_auth', ลำดับความสำคัญ: 100 }

ในกรณีนี้ เส้นทางจำเป็นต้องระบุ _auth ตัวเลือก. ดู

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

Francesco Marchetti-Stasi avatar
จริง ๆ แล้ว นี่ยังไม่สมบูรณ์ แต่มันทำให้ฉันมาถูกทางแล้ว ฉันเข้าใจว่าผู้ให้บริการตรวจสอบสิทธิ์ที่มีอยู่ไม่ตรงกับความต้องการของฉัน ดังนั้นฉันจึงใช้ผู้ให้บริการที่กำหนดเอง จากนั้นฉันก็เพิ่มลงในตัวเลือก `_auth` ตามที่ฉันแนะนำ ฉันคิดว่านี่อาจสมควรได้รับคำตอบใหม่ และความคิดเห็นสำหรับคำถามอื่นที่ทำให้ฉันมาถูกทาง...
4uk4 avatar
cn flag
ฉันลังเลที่จะแนะนำผู้ให้บริการการรับรองความถูกต้องที่กำหนดเอง เนื่องจากหัวข้อคำถามคือคำจำกัดความของเส้นทาง แต่การแสดงคำจำกัดความหลักทั้งสองนั้นชี้ไปในทิศทางนั้น และแน่นอนว่าคุณต้องมีลำดับความสำคัญ >100 เพื่อแทนที่ทั้งสอง
Francesco Marchetti-Stasi avatar
ใช่ มันชี้ไปในทิศทางที่ถูกต้องจริงๆ ฉันสงสัยเกี่ยวกับข้อความของคุณเกี่ยวกับลำดับความสำคัญ เป็นไปได้ไหมว่าหากฉันใช้ลำดับความสำคัญต่ำ ผู้ให้บริการตรวจสอบสิทธิ์ที่กำหนดไว้ล่วงหน้าจะยังคงใช้อยู่ ฉันถามเพราะนั่นคือสิ่งที่ดูเหมือนจะเกิดขึ้น ...
4uk4 avatar
cn flag
หากคุณเปิดใช้งานการพิสูจน์ตัวตนพื้นฐาน HTTP และคุณกำลังส่งส่วนหัวการอนุญาต โมดูลนี้จะถูกใช้ เว้นแต่คุณจะใช้ผู้ให้บริการการพิสูจน์ตัวตนแบบกำหนดเองที่มีลำดับความสำคัญสูงกว่า การรับรองความถูกต้องจะเกิดขึ้นก่อนการกำหนดเส้นทาง หลังจากกำหนดเส้นทางแล้ว จะมีการตรวจสอบเฉพาะว่าผู้ให้บริการที่ชนะการแข่งขันการตรวจสอบสิทธิ์ก่อนหน้านี้เหมาะสมกับเส้นทางหรือไม่
Francesco Marchetti-Stasi avatar
เข้าใจแล้ว. ที่อธิบายทุกสิ่งที่ฉันเห็นฉันไม่พบพฤติกรรมนี้ในที่ใด â แต่ฉันอาจมองไม่ลึกพอ นอกจากนี้ ฉันเดาว่าการใช้พฤติกรรมที่กำหนดเองใน HTTP Basic Authentication ไม่ใช่ข้อกำหนดทั่วไป โดยเฉพาะอย่างยิ่งในปัจจุบัน... อย่างไรก็ตาม ฉันคิดว่า _now_ นี่เป็นเอกสาร _here_ :)
Score:0

แรงบันดาลใจจากคำตอบ @ 4k4 ฉันใช้ผู้ให้บริการการรับรองความถูกต้องที่กำหนดเองตามรายละเอียด ที่นี่: การใช้งานตัวอย่างที่ใช้ในหน้านั้นตรวจสอบเฉพาะส่วนหัวเท่านั้น ฉันเพิ่งเปลี่ยน X-Auth-โทเค็น กับ การอนุญาต เพื่อรับรหัสเพื่อทำสิ่งที่ฉันต้องการ

ด้วยการแก้ไขเล็กน้อย แต่สำคัญ: ถ้าฉันจากไป ลำดับความสำคัญ: 10 ในแท็กของบริการตรวจสอบความถูกต้อง I นิ่ง ได้รับข้อผิดพลาดเดียวกันต่อไปเมื่อฉันส่ง การอนุญาต ส่วนหัวในคำขอ ฉันต่อสู้กับปัญหานี้สองสามชั่วโมง google และค้นหา; ในที่สุดสายตาของฉันก็สบเข้ากับ ลำดับความสำคัญ: -10 ค่าบริการตัวประมวลผลเส้นทางที่ฉันใช้เมื่อหลายเดือนก่อน ซึ่งฉันได้แสดงความคิดเห็นที่เป็นประโยชน์ "การกระทำที่มีลำดับความสำคัญต่ำจะคงอยู่" ดังนั้นฉันจึงเปลี่ยนค่าของลำดับความสำคัญเป็น 1,000 และทันใดนั้นฉันก็จัดการเส้นทางให้ทำงานได้สำเร็จ!

ฉันไม่เข้าใจว่าเหตุใดจึงเกิดขึ้น เนื่องจากฉันมีเพียงผู้ให้บริการการตรวจสอบสิทธิ์ที่กำหนดเองใน _auth เวกเตอร์ภายใต้ ตัวเลือกฉันจึงไม่เห็นว่าผู้ให้บริการรายอื่นจะมีลำดับความสำคัญสูงกว่าได้อย่างไร ฉันคิดว่านี่อาจเป็นข้อบกพร่อง ฉันจะพยายามหาเวลาทำซ้ำในการติดตั้งใหม่ทั้งหมดและจัดไฟล์

ใครก็ตามที่ต้องการความช่วยเหลือในเรื่องนี้ควรดูด้วยเช่นกัน คำถามนี้: มันไม่ได้ช่วยอะไรฉันมากเพราะไม่ได้กล่าวถึงปัญหาที่มีลำดับความสำคัญ แต่เนื่องจากปัญหานั้นเหมือนกันทุกประการ อาจมีการรวบรวมคำแนะนำอื่นๆ

Score:0
ธง bd

คุณสามารถทำอะไรก็ได้ตามที่คุณต้องการเมื่อพูดถึงการควบคุมการเข้าถึง โดยการกำหนดการตรวจสอบการเข้าถึงแบบกำหนดเองผ่านคลาสคอนโทรลเลอร์ (1) ที่คุณตั้งค่าโดยตรงบนเส้นทางเฉพาะ หรือโดยการสร้างบริการตรวจสอบการเข้าถึงของคุณเอง (2)

1. ตรวจสอบการเข้าถึงผ่านคลาสคอนโทรลเลอร์
เอกสาร: การตรวจสอบการเข้าถึงเส้นทางที่กำหนดเอง

ตัวอย่าง.routing.yml

ตัวอย่าง:
  [...]
  ความต้องการ:
    _custom_access: '\Drupal\example\Controller\ExampleController::การเข้าถึง'

ExampleController.php

คลาส ExampleController {

  การเข้าถึงฟังก์ชั่นสาธารณะ (AccountInterface $account) {
    // ส่งคืน \Drupal\Core\Access\AccessResultInterface ที่นี่
  }

}

2. บริการตรวจสอบการเข้าใช้
เอกสาร: การตรวจสอบการเข้าถึงเส้นทางขั้นสูง

โดยพื้นฐานแล้ว คุณทำสิ่งเดียวกันกับที่ให้ _เข้าไป พารามิเตอร์ที่คุณใช้อยู่แล้ว (ซึ่งดำเนินการโดย DefaultAccessChecker. คุณจึงสร้างบริการที่ติดแท็กและกำหนดให้บริการนั้นเป็นข้อกำหนดในเส้นทางของคุณ ตัวอย่างจากเอกสารมีความสมบูรณ์มาก ดังนั้นฉันจึงไม่คัดลอกที่นี่

Francesco Marchetti-Stasi avatar
ขอบคุณ ฉันเพิ่มการตรวจสอบการเข้าถึงเส้นทางที่กำหนดเองในโมดูลของฉันแล้ว ฉันพยายามเพิ่มอีกหนึ่งเส้นทางสำหรับเส้นทางใหม่นี้ แต่ก็ไม่ได้สร้างความแตกต่าง: ในที่สุดฉันก็จัดการปัญหาของฉันได้โดยใช้ผู้ให้บริการตรวจสอบสิทธิ์แบบกำหนดเอง ดังนั้นฉันเดาว่าปัญหาของฉันน่าจะอยู่ที่ขั้นตอนก่อนหน้าของการตรวจสอบสิทธิ์ ไม่ใช่การตรวจสอบการเข้าถึง เฟส

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา