Viele Anwendungen speichern User- und Berechtigungsdaten in Datenbank-Tabellen. Mit Hilfe der Extension quarkus-elytron-security-jdbc ist es sehr einfach, in Quarkus-Anwendungen Security-Daten aus Tabellen zu nutzen. Die Daten gehen dabei in das Standard-Security-System von Jakarta EE ein und können dann bspw. programmatisch genutzt werden:

  @GET
  @Path("name")
  @Produces(MediaType.TEXT_PLAIN)
  public String getName(@Context SecurityContext securityContext) {
    Principal userPrincipal = securityContext.getUserPrincipal();
    return userPrincipal != null ? userPrincipal.getName() : null;
  }

Mit den üblichen Annotationen ist auch eine deklarative Nutzung möglich:

  @GET
  @Path("restricted")
  @RolesAllowed("demoRole")
  @Produces(MediaType.TEXT_PLAIN)
  public String restricted() {
    return "OK";
  }

Zur Konfiguration reichen zwei SQL Queries mit ein paar Zusatz-Properties:

quarkus.security.jdbc.enabled=true
quarkus.security.jdbc.principal-query.sql=SELECT u.CRYPTED_PWD FROM SHOWCASE_USERS u WHERE u.ID=?
quarkus.security.jdbc.principal-query.bcrypt-password-mapper.enabled=true
quarkus.security.jdbc.principal-query.bcrypt-password-mapper.password-index=1
quarkus.security.jdbc.principal-query.bcrypt-password-mapper.salt-index=-1
quarkus.security.jdbc.principal-query.bcrypt-password-mapper.iteration-count-index=-1

quarkus.security.jdbc.principal-query.roles.sql=SELECT r.ROLE FROM SHOWCASE_ROLES r WHERE r.USER_ID=?
quarkus.security.jdbc.principal-query.roles.attribute-mappings.0.index=1
quarkus.security.jdbc.principal-query.roles.attribute-mappings.0.to=groups

Die Beispiele stammen aus unserer Quarkus-Demo-Anwendung quarkus-security-jdbc, die in https://github.com/GEDOPLAN/quarkus-demo enthalten ist.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert