Umgang mit dynamischen Umleitungs-URLs für Multi-Mieter-SaaS mit OAuth in QuarkusJava

Java-Forum
Anonymous
 Umgang mit dynamischen Umleitungs-URLs für Multi-Mieter-SaaS mit OAuth in Quarkus

Post by Anonymous »

Ich erstelle eine SaaS-Anwendung mit mehreren Mietern mit Quarkus und der Implementierung von OAuth 2.0 zur Authentifizierung. Unsere Mieter -URLs folgen einem Muster wie http: // localhost: 9000/store/{mandantid}/Dashboard, wobei {Tenantid} eine eindeutige Kennung für jeden Mieter ist (z. B. 314249607888530860). Da OAuth-Anbieter im Allgemeinen aus Sicherheitsgründen Wildcard-Umleitung von URLs abhalten oder nicht zulassen, muss ich nach erfolgreicher Authentifizierung wieder auf die richtige Mieter-spezifische URL und ihr beabsichtigtes Ziel umgeleitet werden. Hier ist meine Implementierung: < /p>

Code: Select all

@ApplicationScoped
public class CustomTenantConfigResolver implements TenantConfigResolver {

@Override
public Uni resolve(
RoutingContext context, OidcRequestContext requestContext) {
String path = context.request().path();
String[] parts = path.split("/");

if (parts.length < 3) {
return null;
}

if ("store".equals(parts[1])) {
return Uni.createFrom().item(createTenantConfig(parts[2]));
}

return null;
}

private OidcTenantConfig createTenantConfig(String tenantId) {
final AuthenticationConfigBuilder authenticationConfigBuilder =
new AuthenticationConfigBuilder()
.redirectPath("/auth/callback/store")
.scopes(
Arrays.asList(
"openid",
"profile",
"email",
"urn:zitadel:iam:user:resourceowner",
"urn:zitadel:iam:org:id:" + tenantId))
.pkceRequired();

return OidcTenantConfig.authServerUrl("http://localhost:8080")
.clientId("313636401247776172")
.tenantId("storeTenant")
.applicationType(WEB_APP)
.authentication(authenticationConfigBuilder.build())
.tokenStateManager()
.encryptionSecret("changeme")
.end()
.logout()
.path("/logout")
.extraParams(Map.of("client_id", "313636401247776172"))
.end()
.build();
}
}
< /code>
Mein aktueller Ansatz für den Callback -Handler sieht so aus: < /p>
Java < /p>
public class CallbackResource {

@GET
@PermitAll
public Response handleCallback(@Context RoutingContext routingContext,
@Context SecurityContext securityContext,
@Context HttpServerRequest request) {
String originalRequest = null;
if (routingContext.session() != null) {
originalRequest = (String) routingContext.session().get("original-request");
}

String redirectUrl = originalRequest != null ? originalRequest : "/";

if (securityContext.getUserPrincipal() instanceof JsonWebToken) {
JsonWebToken idToken = (JsonWebToken) securityContext.getUserPrincipal();
String tenantId = idToken.getClaim("urn:zitadel:iam:org:id");
if (tenantId != null) {
}
}

return Response.seeOther(URI.create(redirectUrl)).build();
}
}
Meine aktuelle Strategie beinhaltet das Einstellen einer generischen Rückruf -URL (/auth/callback/speicher) in der Mieterkonfiguration und dann, um die ursprüngliche angeforderte URL aus der Sitzung im Rückrufhandler abzurufen. />
Was ist der empfohlene Ansatz in einer Quarkus SaaS -Anwendung mit OAuth, um dynamische Umleitungs -URLs basierend auf dem Mieter zu behandeln? http: // localhost: 9000/store/314249607888530860/Dashboard, z. usw.)? < /li>
Ist meine derzeitige Implementierung von Mandantconfigresolver den Umleitungsweg korrekt festgelegt? Wie handelt Quarkus OIDC dies in einem Multi-Mieter-Kontext?>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post