blog นี้จะมาต่อจาก Part 1 ในส่วนของการทดสอบ authentication

ซึ่งตัวอย่างนี้ผมจะใช้ RestAssured ในส่วนของ test script หลัก ส่วน Spring Security OAuth2 AutoConfigure และ java-jwt สำหรับการเตรียม environment

เริ่มจากการ override ResourceServerConfiguration กันก่อน

เพราะเราจะไม่ใช้ jwkTokenStore จาก Azure จริงๆ ดังนั้นเราจะต้อง override bean jwkTokenStore เป็น in-memory tokenStore แทน เพิ่มเติม

  • ต้อง set priority ของ configuration นี้มาเป็นอันดับ 1 ถึงจะสามารถ override ResourceServerConfiguration ได้ ไม่งั้น priority มันจะทับกันและจะเกิด error นี้
Injection of autowired dependencies failed; nested exception is java.lang.IllegalStateException: @Order on WebSecurityConfigurers must be unique. Order of 3 was already used on org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfiguration@f8c1177, so it cannot be used on org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfiguration@173371c7 too.

สร้าง Base class สำหรับการทดสอบ

มีการ setup RestAssured และ generate JWT เอง เพื่อใช้ send request และ store ใน tokenStore ดังนั้น access token จะตรงกันเสมอ เพิ่มเติม

  • จากเรื่อง Azure AD access token claims ใน part 1 เราจะ focus ที่ roles claim สำหรับการกำหนด application role (Read หรือ Write)
  • กำหนด grant type ให้เป็น client_credentials เนื่องจากเรา access resource ของตัวเอง ไม่ใช่ on-behalf of user (อ่านเพิ่มเติมได้ที่นี่ https://tools.ietf.org/html/rfc6749#section-4.4)

จากนั้นก็เริ่มเขียน test

อย่าลืม inherit IntegrationTest นะครับ

ไปดูตัวอย่างโค้ด https://github.com/raksit31667/example-spring-order