From 2c413d9916e8a862d91a3be93490bed832245c70 Mon Sep 17 00:00:00 2001 From: Dominik Frantisek Bucik Date: Wed, 12 Jan 2022 10:08:30 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20Refactored=20userinfo=20?= =?UTF-8?q?serv.,=20new=20SAML-based=20claim=20sources?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refactored userinfo to fetch attributes only when needed and requested. Also added the possibility to extract attributes from the actual SAML session BREAKING CHANGE: 🧨 requires database update --- .../db/hsql/hsql_database_tables.sql | 1 + .../db/mysql/mysql_database_tables.sql | 3 +- .../db/psql/psql_database_tables.sql | 3 +- .../webapp/WEB-INF/application-context.xml | 57 +- .../main/webapp/WEB-INF/tags/actionmenu.tag | 5 - .../src/main/webapp/WEB-INF/tags/sidebar.tag | 5 - .../src/main/webapp/WEB-INF/tags/topbar.tag | 42 +- .../src/main/webapp/WEB-INF/user-context.xml | 163 ++--- .../ics/discovery/web/DiscoveryEndpoint.java | 8 +- .../oauth2/model/AuthenticationStatement.java | 20 + .../model/SamlAuthenticationDetails.java | 194 ++++++ .../oauth2/model/SavedUserAuthentication.java | 9 +- ...lAuthenticationDetailsStringConverter.java | 48 ++ .../muni/ics/oauth2/web/DeviceEndpoint.java | 19 +- .../ics/oauth2/web/IntrospectionEndpoint.java | 6 +- .../web/OAuthConfirmationController.java | 44 +- .../oidc/server/AttributeMappingsService.java | 13 +- .../oidc/server/PerunAccessTokenEnhancer.java | 4 +- .../oidc/server/PerunOIDCTokenService.java | 6 +- .../claims/ClaimContextCommonParameters.java | 21 - .../claims/ClaimSourceProduceContext.java | 77 +-- .../ics/oidc/server/claims/ClaimUtils.java | 26 + .../EntitlementExtendedClaimSource.java | 2 +- .../claims/sources/EntitlementSource.java | 2 +- .../claims/sources/GroupNamesSource.java | 2 +- .../sources/SamlAttributeClaimSource.java | 68 ++ .../SamlAuthnStatementClaimSource.java | 68 ++ .../oidc/server/userInfo/PerunUserInfo.java | 26 +- .../userInfo/PerunUserInfoCacheLoader.java | 323 ++++++++++ .../server/userInfo/PerunUserInfoService.java | 580 +++--------------- .../server/userInfo/UserInfoCacheKey.java | 55 ++ .../oidc/server/userInfo/UserInfoUtils.java | 170 +++++ .../userInfo/mappings/AddressMappings.java | 26 + .../userInfo/mappings/EmailMappings.java | 22 + .../userInfo/mappings/OpenidMappings.java | 21 + .../userInfo/mappings/PhoneMappings.java | 22 + .../userInfo/mappings/ProfileMappings.java | 34 + .../{ => modifiers}/UserInfoModifier.java | 4 +- .../UserInfoModifierContext.java | 3 +- .../UserInfoModifierInitContext.java | 2 +- .../oidc/web/controllers/ControllerUtils.java | 25 +- .../connect/service/UserInfoService.java | 29 +- .../service/impl/DefaultUserInfoService.java | 35 +- .../impl/MatchLoginHintsAgainstUsers.java | 19 +- .../connect/token/ConnectTokenEnhancer.java | 2 +- .../openid/connect/web/UserInfoEndpoint.java | 6 +- .../connect/web/UserInfoInterceptor.java | 44 +- .../impl/TestDefaultUserInfoService.java | 49 +- 48 files changed, 1521 insertions(+), 892 deletions(-) create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/AuthenticationStatement.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/SamlAuthenticationDetails.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oauth2/model/convert/SamlAuthenticationDetailsStringConverter.java delete mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/ClaimContextCommonParameters.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/sources/SamlAttributeClaimSource.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/claims/sources/SamlAuthnStatementClaimSource.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/PerunUserInfoCacheLoader.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/UserInfoCacheKey.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/UserInfoUtils.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/mappings/AddressMappings.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/mappings/EmailMappings.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/mappings/OpenidMappings.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/mappings/PhoneMappings.java create mode 100644 perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/mappings/ProfileMappings.java rename perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/{ => modifiers}/UserInfoModifier.java (90%) rename perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/{ => modifiers}/UserInfoModifierContext.java (96%) rename perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/{ => modifiers}/UserInfoModifierInitContext.java (94%) diff --git a/perun-oidc-server-webapp/src/main/resources/db/hsql/hsql_database_tables.sql b/perun-oidc-server-webapp/src/main/resources/db/hsql/hsql_database_tables.sql index 2475d8358..1e4c921ce 100644 --- a/perun-oidc-server-webapp/src/main/resources/db/hsql/hsql_database_tables.sql +++ b/perun-oidc-server-webapp/src/main/resources/db/hsql/hsql_database_tables.sql @@ -84,6 +84,7 @@ CREATE TABLE IF NOT EXISTS saved_user_auth ( acr VARCHAR(1024), name VARCHAR(1024), authenticated BOOLEAN, + authentication_attributes VARCHAR(2048) ); CREATE TABLE IF NOT EXISTS saved_user_auth_authority ( diff --git a/perun-oidc-server-webapp/src/main/resources/db/mysql/mysql_database_tables.sql b/perun-oidc-server-webapp/src/main/resources/db/mysql/mysql_database_tables.sql index 6641c04a6..a4a10837c 100644 --- a/perun-oidc-server-webapp/src/main/resources/db/mysql/mysql_database_tables.sql +++ b/perun-oidc-server-webapp/src/main/resources/db/mysql/mysql_database_tables.sql @@ -82,7 +82,8 @@ CREATE TABLE IF NOT EXISTS saved_user_auth ( id BIGINT AUTO_INCREMENT PRIMARY KEY, acr VARCHAR(1024), name VARCHAR(1024), - authenticated BOOLEAN + authenticated BOOLEAN, + authentication_attributes TEXT ); CREATE TABLE IF NOT EXISTS saved_user_auth_authority ( diff --git a/perun-oidc-server-webapp/src/main/resources/db/psql/psql_database_tables.sql b/perun-oidc-server-webapp/src/main/resources/db/psql/psql_database_tables.sql index 74c8c8ffe..7a2c08f85 100644 --- a/perun-oidc-server-webapp/src/main/resources/db/psql/psql_database_tables.sql +++ b/perun-oidc-server-webapp/src/main/resources/db/psql/psql_database_tables.sql @@ -83,7 +83,8 @@ CREATE TABLE IF NOT EXISTS saved_user_auth ( id BIGSERIAL PRIMARY KEY, acr VARCHAR(1024), name VARCHAR(1024), - authenticated BOOLEAN + authenticated BOOLEAN, + authentication_attributes TEXT ); CREATE TABLE IF NOT EXISTS saved_user_auth_authority ( diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/application-context.xml b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/application-context.xml index c16a9cf0c..d5ef99ee5 100644 --- a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/application-context.xml +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/application-context.xml @@ -17,20 +17,24 @@ limitations under the License. --> + xmlns:mvc="http://www.springframework.org/schema/mvc" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:tx="http://www.springframework.org/schema/tx" + xmlns:context="http://www.springframework.org/schema/context" + xmlns:security="http://www.springframework.org/schema/security" + xmlns:oauth="http://www.springframework.org/schema/security/oauth2" + xsi:schemaLocation="http://www.springframework.org/schema/security/oauth2 + http://www.springframework.org/schema/security/spring-security-oauth2-2.0.xsd + http://www.springframework.org/schema/mvc + http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd + http://www.springframework.org/schema/security + http://www.springframework.org/schema/security/spring-security-4.2.xsd + http://www.springframework.org/schema/beans + http://www.springframework.org/schema/beans/spring-beans-4.3.xsd + http://www.springframework.org/schema/tx + http://www.springframework.org/schema/tx/spring-tx-4.3.xsd + http://www.springframework.org/schema/context + http://www.springframework.org/schema/context/spring-context-4.3.xsd"> @@ -57,10 +61,10 @@ + + - - @@ -70,9 +74,26 @@ - + + + + + + + + + + + + + + + + + + - + diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/actionmenu.tag b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/actionmenu.tag index d391a30ad..7b4bad2fa 100644 --- a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/actionmenu.tag +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/actionmenu.tag @@ -13,8 +13,3 @@
  • -
  • -
  • - -
  • -
  • \ No newline at end of file diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/sidebar.tag b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/sidebar.tag index 93f78c871..976f564df 100644 --- a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/sidebar.tag +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/sidebar.tag @@ -11,8 +11,3 @@ - -
    - -
    -
    diff --git a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/topbar.tag b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/topbar.tag index 1bce4a1c5..5b83e7b6a 100644 --- a/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/topbar.tag +++ b/perun-oidc-server-webapp/src/main/webapp/WEB-INF/tags/topbar.tag @@ -3,29 +3,6 @@ <%@ taglib prefix="security" uri="http://www.springframework.org/security/tags"%> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="o" tagdir="/WEB-INF/tags"%> - - - - - - - - - - - - - - - - - - - - - - -