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.