Я использую IdentityProviderMgtServiceStub.updateResidentIdp()
для обновления таймаута сеанса. Это мой код.WSO2 Identity Server 5.1.0 - Обновление IDP-резидента из IdentityProviderMgtService
IdentityProviderMgtServiceStub stub = new IdentityProviderMgtServiceStub("https://localhost:9443/services/IdentityProviderMgtService");
IdentityProvider idp = stub.getResidentIdP();
IdentityProviderProperty [] properties = idp.getIdpProperties();
for(IdentityProviderProperty property: properties){
if(property.getName().equals(SESSION_IDLE_TIMEOUT) && sessionTimeOut!= 0L) {
property.setValue(String.valueOf(sessionTimeOut));
}else if(property.getName().equals(REMEMBER_ME_TIMEOUT) && rememberMeTimeOut!= 0L){
property.setValue(String.valueOf(rememberMeTimeOut));
}
}
idp.setIdpProperties(properties);
stub.updateResidentIdP(idp);
Однако, это бросает исключение:
org.wso2.carbon.idp.mgt.IdentityProviderManagementException: Cannot find authenticator : openidconnect
at org.wso2.carbon.idp.mgt.dao.IdPManagementDAO.getAuthenticatorIdentifier(IdPManagementDAO.java:2571)
at org.wso2.carbon.idp.mgt.dao.IdPManagementDAO.updateFederatedAuthenticatorConfig(IdPManagementDAO.java:385)
at org.wso2.carbon.idp.mgt.dao.IdPManagementDAO.updateFederatedAuthenticatorConfigs(IdPManagementDAO.java:348)
at org.wso2.carbon.idp.mgt.dao.IdPManagementDAO.updateIdP(IdPManagementDAO.java:1716)
at org.wso2.carbon.idp.mgt.dao.CacheBackedIdPMgtDAO.updateIdP(CacheBackedIdPMgtDAO.java:297)
at org.wso2.carbon.idp.mgt.IdentityProviderManager.updateResidentIdP(IdentityProviderManager.java:636)
at org.wso2.carbon.idp.mgt.IdentityProviderManagementService.updateResidentIdP(IdentityProviderManagementService.java:74)
Это исключение уходит, если я вручную позвонить idp.setFederatedAuthenticatorConfigs(null);
. Но это не имеет смысла, поскольку мне не нужно прикасаться к какой-либо области, которую я не обновляю. Мой вопрос:
(1) Безопасно ли позвонить idp.setFederatedAuthenticatorConfigs(null);
в моем случае использования?
(2) Это ошибка в WSO2?
Эй. Спасибо за ответ. Означает ли это, что я могу использовать getResidentIdp() только для извлечения существующего значения из idp? –
Да. Лучше, если можно получить значение из getResidentIdp() и создать новый объект IdentityProvider для обновления – Gayan