7.13.2. UserFederationProvider 与 UserStorageProvider
需要注意的是,UserFederationProvider 是一个完整的界面。您在这个接口中实施了每种方法。但是,UserStorageProvider 已将此接口划分为多个您根据需要实施的功能接口。
UserFederationProvider.getUserByUsername () 和 getUserByEmail () 在新的 SPI 中具有确切的等效点。两者之间的差别在于您如何导入。如果您要继续使用导入策略,您不再调用 KeycloakSession.userStorage ().addUser () 在本地创建用户。而是调用 KeycloakSession.userLocalStorage ().addUser ()。userStorage () 方法不再存在。
UserFederationProvider.validateAndProxy () 方法已移至可选的功能接口 ImportedUserValidation。如果您正移植之前的供应商,您需要实施此界面。另请注意,在之前的 SPI 中,每次访问用户时都会调用此方法,即使本地用户位于缓存中。在后面的 SPI 中,只有从本地存储加载本地用户时,才会调用此方法。如果本地用户被缓存,则 ImportedUserValidation.validate () 方法不会被调用。
之后的 SPI 中不再存在 UserFederationProvider.isValid () 方法。
UserFederationProvider 方法 synchronizeRegistrations ()、registerUser () 和 removeUser () 已移至 UserRegistrationProvider 能力接口。这个新界面是可选的,因此如果您的供应商不支持创建和删除用户,则不必实施它。如果您的供应商有切换支持注册新用户,则在新的 SPI 中支持此操作,如果供应商不支持添加用户,则返回 null from UserRegistrationProvider.addUser ()。
现在,在 CredentialInputValidator 和 CredentialInputUpdater 接口中封装了相关的 UserFederationProvider 方法,这也是可选的,具体取决于您支持验证或更新凭证。用于 UserModel 方法中的凭证管理。它们也被移到 CredentialInputValidator 和 CredentialInputUpdater 接口。请注意,如果没有实现 CredentialInputUpdater 接口,则您的供应商提供的任何凭证都可以在 Red Hat Single Sign-On 存储中本地覆盖。因此,如果您希望您的凭据为只读,实施 CredentialInputUpdater.updateCredential () 方法并返回 ReadOnlyException。
UserFederationProvider 查询方法,如 searchByAttributes () 和 getGroupMembers () 现在封装在一个可选接口 UserQueryProvider 中。如果不实施此接口,则在管理控制台中无法查看用户。您仍然能够登录。