Код: Выделить всё
Pair
pair = keyStoreService.getKeyPair(settings.getSpSettings());
return RelyingPartyRegistration.withRegistrationId(relyingPartyRegistrationId)
.entityId(String.format("https://%s.myservice.com", account.getDomain()))
.singleLogoutServiceLocation(appUrlBuilder.buildUrl(account, "/user/logout"))
.decryptionX509Credentials((saml2X509Credentials) -> {
saml2X509Credentials.add(Saml2X509Credential.decryption(pair.getFirst(), pair.getSecond()));
})
.signingX509Credentials((saml2X509Credentials -> {
saml2X509Credentials.add(Saml2X509Credential.signing(pair.getFirst(), pair.getSecond()));
}))
.assertingPartyDetails((idp) -> {
// todo configure from metadata
idp.entityId(idpSettings.getEntityId());
})
.build();
Код: Выделить всё
private final AssertingPartyMetadataRepository metadata =
OpenSamlAssertingPartyMetadataRepository
.fromTrustedMetadataLocation("https://idp.example.org/metadata").build();
Итак, как мне добиться этого, написав собственный клиентский код http и анализатор XML для SAML?
Это кажется сумасшедшим, что я не мог просто сделать что-то подобное:
Код: Выделить всё
.assertingPartyDetails((idp) -> idp.entityId( myEntityId ).metadataUrl( mdUrl ))
Я делаю это, потому что реализую мультитенантный SAML поддержка реализации моего собственного RelyingPartyRegistrationResolver.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ml2-provid