Skip to content

Commit c38c443

Browse files
committed
Merge branch '5.8.x' into 6.1.x
2 parents fbafe41 + 9203567 commit c38c443

File tree

1 file changed

+19
-41
lines changed

1 file changed

+19
-41
lines changed

docs/modules/ROOT/pages/servlet/oauth2/resource-server/multitenancy.adoc

Lines changed: 19 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -374,29 +374,22 @@ Java::
374374
----
375375
@Component
376376
public class TenantJwtIssuerValidator implements OAuth2TokenValidator<Jwt> {
377-
private final TenantRepository tenants;
378-
private final Map<String, JwtIssuerValidator> validators = new ConcurrentHashMap<>();
377+
private final TenantRepository tenants;
379378
380-
public TenantJwtIssuerValidator(TenantRepository tenants) {
381-
this.tenants = tenants;
382-
}
383-
384-
@Override
385-
public OAuth2TokenValidatorResult validate(Jwt token) {
386-
return this.validators.computeIfAbsent(toTenant(token), this::fromTenant)
387-
.validate(token);
388-
}
379+
private final OAuth2Error error = new OAuth2Error(OAuth2ErrorCodes.INVALID_TOKEN, "The iss claim is not valid",
380+
"https://tools.ietf.org/html/rfc6750#section-3.1");
389381
390-
private String toTenant(Jwt jwt) {
391-
return jwt.getIssuer();
392-
}
382+
public TenantJwtIssuerValidator(TenantRepository tenants) {
383+
this.tenants = tenants;
384+
}
393385
394-
private JwtIssuerValidator fromTenant(String tenant) {
395-
return Optional.ofNullable(this.tenants.findById(tenant))
396-
.map(t -> t.getAttribute("issuer"))
397-
.map(JwtIssuerValidator::new)
398-
.orElseThrow(() -> new IllegalArgumentException("unknown tenant"));
399-
}
386+
@Override
387+
public OAuth2TokenValidatorResult validate(Jwt token) {
388+
if(this.tenants.findById(token.getIssuer()) != null) {
389+
return OAuth2TokenValidatorResult.success();
390+
}
391+
return OAuth2TokenValidatorResult.failure(this.error);
392+
}
400393
}
401394
----
402395
@@ -405,32 +398,17 @@ Kotlin::
405398
[source,kotlin,role="secondary"]
406399
----
407400
@Component
408-
class TenantJwtIssuerValidator(tenants: TenantRepository) : OAuth2TokenValidator<Jwt> {
409-
private val tenants: TenantRepository
410-
private val validators: MutableMap<String, JwtIssuerValidator> = ConcurrentHashMap()
411-
override fun validate(token: Jwt): OAuth2TokenValidatorResult {
412-
return validators.computeIfAbsent(toTenant(token)) { tenant: String -> fromTenant(tenant) }
413-
.validate(token)
414-
}
415-
416-
private fun toTenant(jwt: Jwt): String {
417-
return jwt.issuer.toString()
418-
}
419-
420-
private fun fromTenant(tenant: String): JwtIssuerValidator {
421-
return Optional.ofNullable(tenants.findById(tenant))
422-
.map({ t -> t.getAttribute("issuer") })
423-
.map({ JwtIssuerValidator() })
424-
.orElseThrow({ IllegalArgumentException("unknown tenant") })
425-
}
401+
class TenantJwtIssuerValidator(private val tenants: TenantRepository) : OAuth2TokenValidator<Jwt> {
402+
private val error: OAuth2Error = OAuth2Error(OAuth2ErrorCodes.INVALID_TOKEN, "The iss claim is not valid",
403+
"https://tools.ietf.org/html/rfc6750#section-3.1")
426404
427-
init {
428-
this.tenants = tenants
405+
override fun validate(token: Jwt): OAuth2TokenValidatorResult {
406+
return if (tenants.findById(token.issuer) != null)
407+
OAuth2TokenValidatorResult.success() else OAuth2TokenValidatorResult.failure(error)
429408
}
430409
}
431410
----
432411
======
433-
434412
Now that we have a tenant-aware processor and a tenant-aware validator, we can proceed with creating our xref:servlet/oauth2/resource-server/jwt.adoc#oauth2resourceserver-jwt-architecture-jwtdecoder[`JwtDecoder`]:
435413

436414
[tabs]

0 commit comments

Comments
 (0)