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

公開メンバ関数

String getName ()
 
SAMLIdentityProvider create (KeycloakSession session, IdentityProviderModel model)
 
Map< String, String > parseConfig (KeycloakSession session, InputStream inputStream)
 
String getId ()
 
void init (Scope config)
 

静的公開変数類

static final String PROVIDER_ID = "saml"
 

非公開変数類

DestinationValidator destinationValidator
 

詳解

著者
Pedro Igor

関数詳解

◆ create()

SAMLIdentityProvider org.keycloak.broker.saml.SAMLIdentityProviderFactory.create ( KeycloakSession  session,
IdentityProviderModel  model 
)
inline
57  {
58  return new SAMLIdentityProvider(session, new SAMLIdentityProviderConfig(model), destinationValidator);
59  }
DestinationValidator destinationValidator
Definition: SAMLIdentityProviderFactory.java:49

◆ getId()

String org.keycloak.broker.saml.SAMLIdentityProviderFactory.getId ( )
inline
162  {
163  return PROVIDER_ID;
164  }
static final String PROVIDER_ID
Definition: SAMLIdentityProviderFactory.java:47

◆ getName()

String org.keycloak.broker.saml.SAMLIdentityProviderFactory.getName ( )
inline
52  {
53  return "SAML v2.0";
54  }

◆ init()

void org.keycloak.broker.saml.SAMLIdentityProviderFactory.init ( Scope  config)
inline
167  {
168  super.init(config);
169 
170  this.destinationValidator = DestinationValidator.forProtocolMap(config.getArray("knownProtocols"));
171  }
DestinationValidator destinationValidator
Definition: SAMLIdentityProviderFactory.java:49

◆ parseConfig()

Map<String, String> org.keycloak.broker.saml.SAMLIdentityProviderFactory.parseConfig ( KeycloakSession  session,
InputStream  inputStream 
)
inline
62  {
63  try {
64  Object parsedObject = SAMLParser.getInstance().parse(inputStream);
65  EntityDescriptorType entityType;
66 
67  if (EntitiesDescriptorType.class.isInstance(parsedObject)) {
68  entityType = (EntityDescriptorType) ((EntitiesDescriptorType) parsedObject).getEntityDescriptor().get(0);
69  } else {
70  entityType = (EntityDescriptorType) parsedObject;
71  }
72 
73  List<EntityDescriptorType.EDTChoiceType> choiceType = entityType.getChoiceType();
74 
75  if (!choiceType.isEmpty()) {
76  IDPSSODescriptorType idpDescriptor = null;
77 
78  //Metadata documents can contain multiple Descriptors (See ADFS metadata documents) such as RoleDescriptor, SPSSODescriptor, IDPSSODescriptor.
79  //So we need to loop through to find the IDPSSODescriptor.
80  for(EntityDescriptorType.EDTChoiceType edtChoiceType : entityType.getChoiceType()) {
81  List<EntityDescriptorType.EDTDescriptorChoiceType> descriptors = edtChoiceType.getDescriptors();
82 
83  if(!descriptors.isEmpty() && descriptors.get(0).getIdpDescriptor() != null) {
84  idpDescriptor = descriptors.get(0).getIdpDescriptor();
85  }
86  }
87 
88  if (idpDescriptor != null) {
89  SAMLIdentityProviderConfig samlIdentityProviderConfig = new SAMLIdentityProviderConfig();
90  String singleSignOnServiceUrl = null;
91  boolean postBindingResponse = false;
92  boolean postBindingLogout = false;
93  for (EndpointType endpoint : idpDescriptor.getSingleSignOnService()) {
94  if (endpoint.getBinding().toString().equals(JBossSAMLURIConstants.SAML_HTTP_POST_BINDING.get())) {
95  singleSignOnServiceUrl = endpoint.getLocation().toString();
96  postBindingResponse = true;
97  break;
98  } else if (endpoint.getBinding().toString().equals(JBossSAMLURIConstants.SAML_HTTP_REDIRECT_BINDING.get())){
99  singleSignOnServiceUrl = endpoint.getLocation().toString();
100  }
101  }
102  String singleLogoutServiceUrl = null;
103  for (EndpointType endpoint : idpDescriptor.getSingleLogoutService()) {
104  if (postBindingResponse && endpoint.getBinding().toString().equals(JBossSAMLURIConstants.SAML_HTTP_POST_BINDING.get())) {
105  singleLogoutServiceUrl = endpoint.getLocation().toString();
106  postBindingLogout = true;
107  break;
108  } else if (!postBindingResponse && endpoint.getBinding().toString().equals(JBossSAMLURIConstants.SAML_HTTP_REDIRECT_BINDING.get())){
109  singleLogoutServiceUrl = endpoint.getLocation().toString();
110  break;
111  }
112 
113  }
114  samlIdentityProviderConfig.setSingleLogoutServiceUrl(singleLogoutServiceUrl);
115  samlIdentityProviderConfig.setSingleSignOnServiceUrl(singleSignOnServiceUrl);
116  samlIdentityProviderConfig.setWantAuthnRequestsSigned(idpDescriptor.isWantAuthnRequestsSigned());
117  samlIdentityProviderConfig.setAddExtensionsElementWithKeyInfo(false);
118  samlIdentityProviderConfig.setValidateSignature(idpDescriptor.isWantAuthnRequestsSigned());
119  samlIdentityProviderConfig.setPostBindingResponse(postBindingResponse);
120  samlIdentityProviderConfig.setPostBindingAuthnRequest(postBindingResponse);
121  samlIdentityProviderConfig.setPostBindingLogout(postBindingLogout);
122 
123  List<KeyDescriptorType> keyDescriptor = idpDescriptor.getKeyDescriptor();
124  String defaultCertificate = null;
125 
126  if (keyDescriptor != null) {
127  for (KeyDescriptorType keyDescriptorType : keyDescriptor) {
128  Element keyInfo = keyDescriptorType.getKeyInfo();
129  Element x509KeyInfo = DocumentUtil.getChildElement(keyInfo, new QName("dsig", "X509Certificate"));
130 
131  if (KeyTypes.SIGNING.equals(keyDescriptorType.getUse())) {
132  samlIdentityProviderConfig.addSigningCertificate(x509KeyInfo.getTextContent());
133  } else if (KeyTypes.ENCRYPTION.equals(keyDescriptorType.getUse())) {
134  samlIdentityProviderConfig.setEncryptionPublicKey(x509KeyInfo.getTextContent());
135  } else if (keyDescriptorType.getUse() == null) {
136  defaultCertificate = x509KeyInfo.getTextContent();
137  }
138  }
139  }
140 
141  if (defaultCertificate != null) {
142  if (samlIdentityProviderConfig.getSigningCertificates().length == 0) {
143  samlIdentityProviderConfig.addSigningCertificate(defaultCertificate);
144  }
145 
146  if (samlIdentityProviderConfig.getEncryptionPublicKey() == null) {
147  samlIdentityProviderConfig.setEncryptionPublicKey(defaultCertificate);
148  }
149  }
150 
151  return samlIdentityProviderConfig.getConfig();
152  }
153  }
154  } catch (ParsingException pe) {
155  throw new RuntimeException("Could not parse IdP SAML Metadata", pe);
156  }
157 
158  return new HashMap<String, String>();
159  }

メンバ詳解

◆ destinationValidator

DestinationValidator org.keycloak.broker.saml.SAMLIdentityProviderFactory.destinationValidator
private

◆ PROVIDER_ID

final String org.keycloak.broker.saml.SAMLIdentityProviderFactory.PROVIDER_ID = "saml"
static

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