keycloak-service
公開メンバ関数 | 静的公開変数類 | 静的関数 | 非公開メンバ関数 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.broker.saml.mappers.UserAttributeMapper クラス
org.keycloak.broker.saml.mappers.UserAttributeMapper の継承関係図
Inheritance graph
org.keycloak.broker.saml.mappers.UserAttributeMapper 連携図
Collaboration graph

公開メンバ関数

List< ProviderConfigProperty > getConfigProperties ()
 
String getId ()
 
String [] getCompatibleProviders ()
 
String getDisplayCategory ()
 
String getDisplayType ()
 
void preprocessFederatedIdentity (KeycloakSession session, RealmModel realm, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context)
 
void updateBrokeredUser (KeycloakSession session, RealmModel realm, UserModel user, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context)
 
String getHelpText ()
 

静的公開変数類

static final String [] COMPATIBLE_PROVIDERS = {SAMLIdentityProviderFactory.PROVIDER_ID}
 
static final String ATTRIBUTE_NAME = "attribute.name"
 
static final String ATTRIBUTE_FRIENDLY_NAME = "attribute.friendly.name"
 
static final String USER_ATTRIBUTE = "user.attribute"
 
static final String PROVIDER_ID = "saml-user-attribute-idp-mapper"
 

静的関数

 [static initializer]
 

非公開メンバ関数

String getAttributeNameFromMapperModel (IdentityProviderMapperModel mapperModel)
 
void setIfNotEmpty (Consumer< String > consumer, List< String > values)
 
Predicate< AttributeStatementType.ASTChoiceType > elementWith (String attributeName)
 
List< String > findAttributeValuesInContext (String attributeName, BrokeredIdentityContext context)
 

静的非公開変数類

static final List< ProviderConfigProperty > configProperties = new ArrayList<>()
 
static final String EMAIL = "email"
 
static final String FIRST_NAME = "firstName"
 
static final String LAST_NAME = "lastName"
 

詳解

著者
Bill Burke
バージョン
Revision
1

関数詳解

◆ [static initializer]()

org.keycloak.broker.saml.mappers.UserAttributeMapper.[static initializer] ( )
inlinestaticpackage

◆ elementWith()

Predicate<AttributeStatementType.ASTChoiceType> org.keycloak.broker.saml.mappers.UserAttributeMapper.elementWith ( String  attributeName)
inlineprivate
139  {
140  return attributeType -> {
141  AttributeType attribute = attributeType.getAttribute();
142  return Objects.equals(attribute.getName(), attributeName)
143  || Objects.equals(attribute.getFriendlyName(), attributeName);
144  };
145  }

◆ findAttributeValuesInContext()

List<String> org.keycloak.broker.saml.mappers.UserAttributeMapper.findAttributeValuesInContext ( String  attributeName,
BrokeredIdentityContext  context 
)
inlineprivate
148  {
149  AssertionType assertion = (AssertionType) context.getContextData().get(SAMLEndpoint.SAML_ASSERTION);
150 
151  return assertion.getAttributeStatements().stream()
152  .flatMap(statement -> statement.getAttributes().stream())
153  .filter(elementWith(attributeName))
154  .flatMap(attributeType -> attributeType.getAttribute().getAttributeValue().stream())
155  .filter(Objects::nonNull)
156  .map(Object::toString)
157  .collect(Collectors.toList());
158  }
Predicate< AttributeStatementType.ASTChoiceType > elementWith(String attributeName)
Definition: UserAttributeMapper.java:139

◆ getAttributeNameFromMapperModel()

String org.keycloak.broker.saml.mappers.UserAttributeMapper.getAttributeNameFromMapperModel ( IdentityProviderMapperModel  mapperModel)
inlineprivate
125  {
126  String attributeName = mapperModel.getConfig().get(ATTRIBUTE_NAME);
127  if (attributeName == null) {
128  attributeName = mapperModel.getConfig().get(ATTRIBUTE_FRIENDLY_NAME);
129  }
130  return attributeName;
131  }
static final String ATTRIBUTE_NAME
Definition: UserAttributeMapper.java:47
static final String ATTRIBUTE_FRIENDLY_NAME
Definition: UserAttributeMapper.java:48

◆ getCompatibleProviders()

String [] org.keycloak.broker.saml.mappers.UserAttributeMapper.getCompatibleProviders ( )
inline
89  {
90  return COMPATIBLE_PROVIDERS;
91  }
static final String [] COMPATIBLE_PROVIDERS
Definition: UserAttributeMapper.java:43

◆ getConfigProperties()

List<ProviderConfigProperty> org.keycloak.broker.saml.mappers.UserAttributeMapper.getConfigProperties ( )
inline
79  {
80  return configProperties;
81  }
static final List< ProviderConfigProperty > configProperties
Definition: UserAttributeMapper.java:45

◆ getDisplayCategory()

String org.keycloak.broker.saml.mappers.UserAttributeMapper.getDisplayCategory ( )
inline
94  {
95  return "Attribute Importer";
96  }

◆ getDisplayType()

String org.keycloak.broker.saml.mappers.UserAttributeMapper.getDisplayType ( )
inline
99  {
100  return "Attribute Importer";
101  }

◆ getHelpText()

String org.keycloak.broker.saml.mappers.UserAttributeMapper.getHelpText ( )
inline
191  {
192  return "Import declared saml attribute if it exists in assertion into the specified user property or attribute.";
193  }

◆ getId()

String org.keycloak.broker.saml.mappers.UserAttributeMapper.getId ( )
inline
84  {
85  return PROVIDER_ID;
86  }
static final String PROVIDER_ID
Definition: UserAttributeMapper.java:76

◆ preprocessFederatedIdentity()

void org.keycloak.broker.saml.mappers.UserAttributeMapper.preprocessFederatedIdentity ( KeycloakSession  session,
RealmModel  realm,
IdentityProviderMapperModel  mapperModel,
BrokeredIdentityContext  context 
)
inline
104  {
105  String attribute = mapperModel.getConfig().get(USER_ATTRIBUTE);
106  if (StringUtil.isNullOrEmpty(attribute)) {
107  return;
108  }
109  String attributeName = getAttributeNameFromMapperModel(mapperModel);
110 
111  List<String> attributeValuesInContext = findAttributeValuesInContext(attributeName, context);
112  if (!attributeValuesInContext.isEmpty()) {
113  if (attribute.equalsIgnoreCase(EMAIL)) {
114  setIfNotEmpty(context::setEmail, attributeValuesInContext);
115  } else if (attribute.equalsIgnoreCase(FIRST_NAME)) {
116  setIfNotEmpty(context::setFirstName, attributeValuesInContext);
117  } else if (attribute.equalsIgnoreCase(LAST_NAME)) {
118  setIfNotEmpty(context::setLastName, attributeValuesInContext);
119  } else {
120  context.setUserAttribute(attribute, attributeValuesInContext);
121  }
122  }
123  }
String getAttributeNameFromMapperModel(IdentityProviderMapperModel mapperModel)
Definition: UserAttributeMapper.java:125
void setIfNotEmpty(Consumer< String > consumer, List< String > values)
Definition: UserAttributeMapper.java:133
static final String FIRST_NAME
Definition: UserAttributeMapper.java:51
static final String EMAIL
Definition: UserAttributeMapper.java:50
List< String > findAttributeValuesInContext(String attributeName, BrokeredIdentityContext context)
Definition: UserAttributeMapper.java:148
static final String USER_ATTRIBUTE
Definition: UserAttributeMapper.java:49
static final String LAST_NAME
Definition: UserAttributeMapper.java:52

◆ setIfNotEmpty()

void org.keycloak.broker.saml.mappers.UserAttributeMapper.setIfNotEmpty ( Consumer< String >  consumer,
List< String >  values 
)
inlineprivate
133  {
134  if (values != null && !values.isEmpty()) {
135  consumer.accept(values.get(0));
136  }
137  }

◆ updateBrokeredUser()

void org.keycloak.broker.saml.mappers.UserAttributeMapper.updateBrokeredUser ( KeycloakSession  session,
RealmModel  realm,
UserModel  user,
IdentityProviderMapperModel  mapperModel,
BrokeredIdentityContext  context 
)
inline
161  {
162  String attribute = mapperModel.getConfig().get(USER_ATTRIBUTE);
163  if (StringUtil.isNullOrEmpty(attribute)) {
164  return;
165  }
166  String attributeName = getAttributeNameFromMapperModel(mapperModel);
167  List<String> attributeValuesInContext = findAttributeValuesInContext(attributeName, context);
168  if (attribute.equalsIgnoreCase(EMAIL)) {
169  setIfNotEmpty(user::setEmail, attributeValuesInContext);
170  } else if (attribute.equalsIgnoreCase(FIRST_NAME)) {
171  setIfNotEmpty(user::setFirstName, attributeValuesInContext);
172  } else if (attribute.equalsIgnoreCase(LAST_NAME)) {
173  setIfNotEmpty(user::setLastName, attributeValuesInContext);
174  } else {
175  List<String> currentAttributeValues = user.getAttributes().get(attribute);
176  if (attributeValuesInContext == null) {
177  // attribute no longer sent by brokered idp, remove it
178  user.removeAttribute(attribute);
179  } else if (currentAttributeValues == null) {
180  // new attribute sent by brokered idp, add it
181  user.setAttribute(attribute, attributeValuesInContext);
182  } else if (!CollectionUtil.collectionEquals(attributeValuesInContext, currentAttributeValues)) {
183  // attribute sent by brokered idp has different values as before, update it
184  user.setAttribute(attribute, attributeValuesInContext);
185  }
186  // attribute allready set
187  }
188  }
String getAttributeNameFromMapperModel(IdentityProviderMapperModel mapperModel)
Definition: UserAttributeMapper.java:125
void setIfNotEmpty(Consumer< String > consumer, List< String > values)
Definition: UserAttributeMapper.java:133
static final String FIRST_NAME
Definition: UserAttributeMapper.java:51
static final String EMAIL
Definition: UserAttributeMapper.java:50
List< String > findAttributeValuesInContext(String attributeName, BrokeredIdentityContext context)
Definition: UserAttributeMapper.java:148
static final String USER_ATTRIBUTE
Definition: UserAttributeMapper.java:49
static final String LAST_NAME
Definition: UserAttributeMapper.java:52

メンバ詳解

◆ ATTRIBUTE_FRIENDLY_NAME

final String org.keycloak.broker.saml.mappers.UserAttributeMapper.ATTRIBUTE_FRIENDLY_NAME = "attribute.friendly.name"
static

◆ ATTRIBUTE_NAME

final String org.keycloak.broker.saml.mappers.UserAttributeMapper.ATTRIBUTE_NAME = "attribute.name"
static

◆ COMPATIBLE_PROVIDERS

final String [] org.keycloak.broker.saml.mappers.UserAttributeMapper.COMPATIBLE_PROVIDERS = {SAMLIdentityProviderFactory.PROVIDER_ID}
static

◆ configProperties

final List<ProviderConfigProperty> org.keycloak.broker.saml.mappers.UserAttributeMapper.configProperties = new ArrayList<>()
staticprivate

◆ EMAIL

final String org.keycloak.broker.saml.mappers.UserAttributeMapper.EMAIL = "email"
staticprivate

◆ FIRST_NAME

final String org.keycloak.broker.saml.mappers.UserAttributeMapper.FIRST_NAME = "firstName"
staticprivate

◆ LAST_NAME

final String org.keycloak.broker.saml.mappers.UserAttributeMapper.LAST_NAME = "lastName"
staticprivate

◆ PROVIDER_ID

final String org.keycloak.broker.saml.mappers.UserAttributeMapper.PROVIDER_ID = "saml-user-attribute-idp-mapper"
static

◆ USER_ATTRIBUTE

final String org.keycloak.broker.saml.mappers.UserAttributeMapper.USER_ATTRIBUTE = "user.attribute"
static

このクラス詳解は次のファイルから抽出されました: