A REST API védelme a Spring Cloud Azure használatával

Ez az oktatóanyag bemutatja, hogyan engedélyezheti a REST API-k védelmét Microsoft Entra ID egy Spring Boot-alkalmazásban.

Ez a cikk egy felmérési rendszert használ példaként. A felmérési rendszer a következő REST API-kat biztosítja:

  • GET /api/survey/question a felmérés megtekintésére használható.
  • POST /api/survey a felmérés kitöltésére használható.
  • GET /api/survey a felmérés eredményének megtekintésére használható.

Ebben a cikkben a szerepköralapú hozzáférés-vezérlés (RBAC) alkalmazásával védheti ezeket az API-kat a következő követelmények érvényre juttatásához:

  • GET /api/survey/question minden kéréshez elérhető.
  • POST /api/survey a megadott SCOPE_Survey.User hatókörrel rendelkező hozzáférési jogkivonatot tartalmazó hitelesített felhasználói kérelmekhez érhető el.
  • GET /api/survey olyan hitelesített rendszergazdai felhasználói kérésekhez érhető el, amelyek a megadott SCOPE_Survey.Admin hatókörrel rendelkező hozzáférési jogkivonatot tartalmaznak.

Előfeltételek

Fontos

A cikkben ismertetett lépések elvégzéséhez a Spring Boot 2.5-ös vagy újabb verziójára van szükség.

A REST API regisztrálása

Az alábbi lépésekkel regisztrálhatja a webes API-t a Azure portálon.

  1. Jelentkezzen be a Azure portálra.

  2. Ha több bérlőhöz van hozzáférése, a Címtár + előfizetés szűrővel ( ) válassza ki azt a bérlőt, amelyben regisztrálni szeretne egy alkalmazást.

  3. Keresse meg és válassza ki a Microsoft Entra ID.

  4. A Manage területen válassza a Alkalmazásregisztrációk>Új regisztráció lehetőséget.

  5. Adja meg például az alkalmazás nevét a Név mezőben Api-SurveyService. Előfordulhat, hogy az alkalmazás felhasználói látják ezt a nevet, és később módosíthatja.

  6. Támogatott fióktípusok esetén válassza a Bármely szervezeti címtárban lévő Fiókok lehetőséget.

  7. Válassza a Regisztráció lehetőséget az alkalmazás létrehozásához.

  8. Az Alkalmazás áttekintése lapon keresse meg az alkalmazás (ügyfél) azonosítójának értékét, majd jegyezze fel későbbi használatra. A projekt YAML-konfigurációs fájljának konfigurálásához szükség van rá.

  9. A Kezelés alatt válassza az API kitevés>Hatókör hozzáadása lehetőséget. Fogadja el a javasolt alkalmazásazonosító URI-ját (api://{clientId}) a Mentés és folytatás gombra kattintva, majd adja meg a következő adatokat:

    • A Hatókör neve mezőbe írja be a következőt Survey.User:
    • A Ki tud hozzájárulni lehetőséghez válassza a Rendszergazdák és felhasználók lehetőséget.
    • rendszergazdai hozzájárulás megjelenítendő neve, írja be Access the survey service as a user..
    • A rendszergazdai hozzájárulás leírásáhozírja be: Allows the users to write data in survey system..
    • Felhasználói hozzájárulás megjelenítendő neve, írja be a következő értéket: Access the survey service as a user..
    • A felhasználói hozzájárulás leírásához írja be a Allows the users to write data in survey system..
    • Állapot alatt tartsa bekapcsolva.
    • Válassza a Hatókör hozzáadása lehetőséget.
  10. Ismételje meg az előző lépést egy másik hatókör hozzáadásához. Ha a Hatókör hozzáadásalehetőséget választja, adja meg a következő adatokat:

    • A Hatókör neve mezőbe írja be a következőt Survey.Admin:
    • A Ki tud hozzájárulni lehetőséghez válassza a Rendszergazdák és felhasználók lehetőséget.
    • rendszergazdai hozzájárulás megjelenítendő neve, írja be Access the survey service as a admin..
    • A rendszergazdai hozzájárulás leírásáhozírja be: Allows the users to view data in survey system..
    • Felhasználói hozzájárulás megjelenítendő neve, írja be a következő értéket: Access the survey service as a admin..
    • A felhasználói hozzájárulás leírásához írja be a Allows the users to view data in survey system..
    • Állapot alatt tartsa bekapcsolva.
    • Válassza a Hatókör hozzáadása lehetőséget.

A Microsoft Entra ID Spring Cloud Azure Starter engedélyezése

Ezután engedélyezze a REST API-védelmet a Spring Cloud Azure.

Biztonsági függőségek hozzáadása

A Spring Cloud Azure Starter Azure Active Directory modul telepítéséhez adja hozzá a következő függőségeket a pom.xml fájlhoz:

  • A Spring Cloud Azure Anyagjegyzék (BOM):

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>7.4.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Megjegyzés

    Ha Spring Boot 4.0.x-et használ, állítsa a verziót a spring-cloud-azure-dependencies következőre 7.4.0: .

    Ha a Spring Boot 3.5.x-et használja, állítsa a verziót a spring-cloud-azure-dependencies következőre 6.5.0: .

    Ha a Spring Boot 3.1.x-3.5.x verziót használja, mindenképpen állítsa be a verziót spring-cloud-azure-dependencies-ra/c1.

    Ha a Spring Boot 2.x-et használja, mindenképpen állítsa be a spring-cloud-azure-dependencies verziót 4.20.0-re.

    Ezt az anyagjegyzéket (BOM) a <dependencyManagement> fájl szakaszában kell konfigurálni. Ez biztosítja, hogy minden Spring Cloud-Azure függőség ugyanazt a verziót használja.

    Az ebben az anyagjegyzékben használt verzióval kapcsolatos további információkért lásd: Melyik Spring Cloud Azure verziót érdemes használnom.

  • A Spring Cloud Azure Starter Microsoft Entra összetevő:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-active-directory</artifactId>
    </dependency>
    
  • A Spring Boot Starter OAuth2 erőforráskiszolgáló összetevő:

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
    </dependency>
    

HTTP-kérések engedélyezése

A felmérés REST API-inak védelméhez adja hozzá a széljegyzetet @PreAuthorize("hasAuthority('SCOPE_Survey.xxx')") egy konkrét hatókörnévvel a védelem engedélyezéséhez, ahogyan az a következő példában látható:

import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;
import java.util.LinkedHashMap;
import java.util.Map;

@RestController
@RequestMapping("/api/survey")
public class SurveyController {

    private static final String QUESTION = "Which sports do you like most?";
    private final Map<LocalDateTime, String> surveys = new LinkedHashMap<>();

    @GetMapping(value = "/question", produces = MediaType.APPLICATION_JSON_VALUE)
    public String question() {
        return QUESTION;
    }

    @PostMapping
    @PreAuthorize("hasAuthority('SCOPE_Survey.User')")
    public String addAnswer(@RequestParam("answer") String answer) {
        if (StringUtils.hasText(answer)) {
            surveys.put(LocalDateTime.now(), answer);
            return "succeeded";
        }
        return "Failed";
    }

    @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
    @PreAuthorize("hasAuthority('SCOPE_Survey.Admin')")
    public Map<LocalDateTime, String> list() {
        return surveys;
    }
}

Frissítse a YAML-konfigurációt az alábbi példában látható módon:

spring:
  cloud:
    azure:
      active-directory:
        enabled: true
        credential:
          client-id: <your-application-ID-of-Api-SurveyService>
        app-id-uri: <your-application-ID-URI-of-Api-SurveyService>

Megjegyzés

Az 1.0-s verziójú jogkivonatok esetében a konfigurációhoz az API ügyfél-azonosítója szükséges, míg a 2.0-s verziójú jogkivonatokban használhatja az ügyfél-azonosítót vagy az alkalmazásazonosító URI-ját a kérelemben. Mindkettőt konfigurálhatja úgy, hogy megfelelően végezze el a célközönség érvényesítését.

Üzembe helyezés a Azure Spring Apps

Miután helyi környezetben futtatja a Spring Boot alkalmazást, áthelyezheti éles környezetbe. Azure Spring Apps megkönnyíti a Spring Boot-alkalmazások Azure való üzembe helyezését kódmódosítások nélkül. A szolgáltatás kezeli a Spring-alkalmazások infrastruktúráját, hogy a fejlesztők a kódjukra összpontosíthassanak. Azure Spring Apps teljes körű monitorozás és diagnosztika, konfigurációkezelés, szolgáltatásfelderítés, CI/CD-integráció, kék-zöld környezetek és egyebek használatával biztosítja az életciklus-felügyeletet. További információ: Gyorsútmutató: Az első alkalmazás üzembe helyezése az Azure Spring Apps szolgáltatásban.

Következő lépések