关于SpringSecurity2.5.0的小问题。
以前在2.1.0时有一个Spring + Security项目。
现在我进行了升级,跳到了Spring 2.5.0 +spring-security-saml2 2-service-provider 5.5.0
业务逻辑工作正常,我们正在使用此SAML身份验证,没有问题。
我们拥有的一个片段是:
//local signing (and decryption key)
Saml2X509Credential signingCredential = getSigningCredential();
//IDP certificate for verification of incoming messages
Saml2X509Credential idpVerificationCertificate = getVerificationCertificate();
String acsUrlTemplate = "{baseUrl}" + Saml2WebSsoAuthenticationFilter.DEFAULT_FILTER_PROCESSES_URI;
return RelyingPartyRegistration.withRegistrationId(registrationId)
.remoteIdpEntityId(idpEntityId)
.idpWebSsoUrl(webSsoEndpoint)
.credentials(c -> c.add(signingCredential))
.credentials(c -> c.add(idpVerificationCertificate))
.localEntityIdTemplate(localEntityIdTemplate)
.assertionConsumerServiceUrlTemplate(acsUrlTemplate)
.build();再一次,工作得很好。
我们把这个项目推到了最新版本(截至本文撰写之时) 2.5.0,并在代码片段的大多数行中看到了反对意见。
尝试查看SpringSecurity5.5.0,其中建议使用assertionConsumerServiceLocation。
但是我很难理解,什么是字符串取代了一切?
return RelyingPartyRegistration.withRegistrationId(registrationId).assertionConsumerServiceLocation("what comes here?").build();有什么帮助吗?
发布于 2021-06-26 06:51:16
在回顾Security之后,这与新的security 5.5+版本相当:
RelyingPartyRegistration getSaml2AuthenticationConfiguration() {
//remote IDP entity ID
String idpEntityId = "https://simplesaml-for-spring-saml.cfapps.io/saml2/idp/SSOService.php";
//remote WebSSO Endpoint - Where to Send AuthNRequests to
String webSsoEndpoint = "https://simplesaml-for-spring-saml.cfapps.io/saml2/idp/metadata.php";
String acsUrlTemplate = "{baseUrl}" + Saml2WebSsoAuthenticationFilter.DEFAULT_FILTER_PROCESSES_URI;
//local signing (and decryption key)
Saml2X509Credential relyingPartySigningCredential = getSigningCredential();
//IDP certificate for verification of incoming messages
Saml2X509Credential assertingPartyVerificationCredential = getVerificationCertificate();
//local registration ID
String registrationId = "registrationId";
//local entity ID - autogenerated based on URL
String localEntityIdTemplate = "localEntityIdTemplate";
return RelyingPartyRegistration
.withRegistrationId(registrationId)
.entityId(localEntityIdTemplate)
.assertionConsumerServiceLocation(acsUrlTemplate)
.signingX509Credentials(c -> c.add(relyingPartySigningCredential))
.assertingPartyDetails(details -> details
.verificationX509Credentials(c -> c.add(assertingPartyVerificationCredential))
.singleSignOnServiceLocation(webSsoEndpoint)
.entityId(idpEntityId)).build();
}发布于 2021-06-02 12:55:37
反对的动机是我们应该在规范语言中使用RelyingPartyRegistration。
对约定进行了更改,以便更好地遵循注册所表示的元数据描述符。
例如,RelyingPartyRegistration.ProviderDetails包含一个名为getWebSsoUrl的方法,但这并不能很容易地映射到IDPSSODescriptor中的任何东西。将其命名为getSingleSignOnServiceLocation会更清楚,因为这些信息位于。
您可以看到应该在方法的javadoc中使用什么。就像这样:
/**
* @deprecated Use {@link #assertionConsumerServiceLocation} instead.
*/
@Deprecated
public Builder assertionConsumerServiceUrlTemplate(String assertionConsumerServiceUrlTemplate) {
this.assertionConsumerServiceLocation = assertionConsumerServiceUrlTemplate;
return this;
}或者打开Spring安全官方存储库中的。
https://stackoverflow.com/questions/67780616
复制相似问题