SAMLシングル・サインオンの構成
WLSTを使用して、WebLogic ServerドメインでSAMLシングル・サインオン(SSO)を有効にします。
WebLogicドメインでSAML SSOを有効にする場合は、セキュリティ・プロバイダまたは認証プロバイダ、SAML 2.0全般サービスを構成し、ドメインのロールに応じてIDプロバイダ・サービスまたはサービス・プロバイダ・サービスを構成する必要があります。WebLogicでSAML SSOを構成する一般的なプロセスの詳細は、『Oracle WebLogic Serverセキュリティの管理』のSAML 2.0サービスの構成に関する項を参照してください。
パートナ・プロパティのインポート
WLSTオフラインを使用してSAML SSOを構成する前に、フェデレーテッド・パートナのメタデータ・ファイルをエクスポートし、IDプロバイダ・パートナのプロパティ・ファイルまたはサービス・プロバイダ・パートナのプロパティ・ファイルを作成して、両方のファイルをDOMAIN_HOME/security
ディレクトリに配置する必要があります。
-
WSLTオンラインを使用して、フェデレーテッド・パートナからメタデータ・ファイルをエクスポートします。WLSTオフラインでは、メタデータのエクスポートはサポートされていません。
-
パートナ・プロパティ・ファイルを作成します。
-
WebLogic ServerをIDプロバイダとして使用する場合は、ファイルを作成し、
saml2sppartner.properties
という名前を付けます。次の例をリファレンスとして使用します。#
で始まるプロパティはオプションです。saml2.sp.partners=401kPartner,hmoPartner 401kPartner.metadata.file=401ksp_metadata.xml hmoPartner.metadata.file=hmosp_metadata.xml # hmoPartner.enabled=true # hmoPartner.description= # hmoPartner.mapperClassname= # hmoPartner.wantAssertionsSigned=false # hmoPartner.timeToLive=100 # hmoPartner.timeToLiveOffset=50 # hmoPartner.generateAttributes=false # hmoPartner.keyInfoIncluded=false # hmoPartner.includeOneTimeUseCondition=false
-
WebLogic Serverをサービス・プロバイダとして使用する場合は、ファイルを作成し、
saml2idppartner.properties
という名前を付けます。次の例をリファレンスとして使用します。#
で始まるプロパティはオプションです。saml2.idp.partners=company1Partner,company2Partner company1Partner.description=Company1 IDP Partner company1Partner.metadata.file=company1idp_metadata.xml company1Partner.enabled=true company1Partner.redirectUris=/company1app/target.jsp,/company1app/index.jsp company2Partner.metadata.file=company2idp_metadata.xml company2Partner.redirectUris=/company2app/target.jsp,/company2app/welcome.jsp company2Partner.issuerUri= company2Partner.enabled=true company2Partner.virtualUserEnabled=true # company2Partner.mapperClassname=com.bea.security.saml2.providers.SAML2IdentityAsserterNameMapper # company2Partner.wantAssertionsSigned=false # company2Partner.processAttributes=false
-
-
パートナ・メタデータ・ファイルおよびパートナ・プロパティ・ファイルを
DOMAIN_HOME/security
ディレクトリに保存します。
サンプル: SAML SSOによるIDプロバイダ・サイトとしてのWebLogic Serverの構成
このサンプルWLSTスクリプトを開始点として使用して、IDプロバイダとして機能するWebLogic ServerインスタンスでSAML 2.0シングル・サインオン(SSO)を構成する独自のスクリプトを作成します。
ノート:
WLSTオフラインを使用してSAML SSOを構成する場合は、サービス・プロバイダ・パートナのプロパティ・ファイルを作成する必要があります。このプロパティ・ファイルは、フェデレーテッド・パートナに必要な重要なSAML 2.0パートナ・メタデータを指定します。パートナ・プロパティ・ファイルの詳細は、「パートナ・プロパティのインポート」を参照してください。
例C-1 IDプロバイダ・サイトとしてのWebLogic Serverの構成とSAML SSOの有効化
プレースホルダ・テキストを実際の値で更新します。プレースホルダ・テキストは@
記号で囲みます。たとえば、@admin_username@
などです。
def getEnvVar(var): val=os.environ.get(var) if val==None: print "ERROR: Env var ",var, " not set." sys.exit(1) return val # Configure SAML2 Credential Mappers def configSAML2CM(): cd('/SecurityConfiguration/@domainName@/Realms/@realmName@') create('@saml2CMName@', 'com.bea.security.saml2.providers.SAML2CredentialMapper', 'CredentialMapper') cd('CredentialMappers') cd('@saml2CMName@') cmo.setIssuerURI('@url@/company1idp_entityid') # Configure SAML1.1 V2 Credential Mappers def configSAML11V2CM(): cd('/SecurityConfiguration/@domainName@/Realms/@realmName@') create('@samlV2CMName@', 'weblogic.security.providers.saml.SAMLCredentialMapperV2', 'CredentialMapper') cd('CredentialMappers') cd('@samlV2CMName@') cmo.setIssuerURI('@url@/company1idp_saml11issuer') cmo.setNameQualifier('company1idp_saml11namequalifier') # Configure SAML2 SSO Service def configSSOService(AdminServerName): cd('/Server') cd(AdminServerName) create(AdminServerName, 'SingleSignOnServices') cd('SingleSignOnServices') cd(AdminServerName) cmo.setContactPersonGivenName('company1ContactPersonGivenName') cmo.setContactPersonSurName('company1ContactPersonSurName') cmo.setContactPersonType('technical') cmo.setContactPersonCompany('company1ContactPersonCompany') cmo.setContactPersonTelephoneNumber('company1ContactPersonTelephoneNumber') cmo.setContactPersonEmailAddress('company1ContactPersonEmailAddress') cmo.setOrganizationName('company1OrganizationName') cmo.setOrganizationURL('company1OrganizationURL') cmo.setEntityID('@url@/company1idp_entityid') cmo.setPublishedSiteURL('@url@/saml2') cmo.setLoginURL('@url@/loginapp/loginapp.jsp') cmo.setIdentityProviderPOSTBindingEnabled(true) cmo.setIdentityProviderArtifactBindingEnabled(true) cmo.setIdentityProviderRedirectBindingEnabled(true) cmo.setIdentityProviderPreferredBinding('HTTP/POST') cmo.setSSOSigningKeyAlias('company1IdPSSOSigningKeyAlias') ssoSigningKeyPassPhraseEncrypted=encrypt('company1IdPSSOSigningKeyPassPhrase', '@domainPath@') cmo.setSSOSigningKeyPassPhraseEncrypted(ssoSigningKeyPassPhraseEncrypted) twoWaySSLEnabled='@twoWaySSLEnabled@' if twoWaySSLEnabled == 'true': cmo.setTransportLayerSecurityKeyAlias('company1IdPTLSKeyAlias') transportLayerSecurityKeyPassPhraseEncrypted=encrypt('company1IdPTLSKeyPassPhrase', '@domainPath@') cmo.setTransportLayerSecurityKeyPassPhraseEncrypted(transportLayerSecurityKeyPassPhraseEncrypted) cmo.setIdentityProviderEnabled(true) # Configure SAML1.1 Federation Service def configFedService(AdminServerName): cd('/Server') cd(AdminServerName) create(AdminServerName, 'FederationServices') cd('FederationServices') cd(AdminServerName) cmo.setSourceSiteURL('@url@/company1idp_saml11') cmo.setSigningKeyAlias('company1IdPSSOSigningKeyAlias') signingKeyPassPhraseEncrypted=encrypt('company1IdPSSOSigningKeyPassPhrase', '@domainPath@') cmo.setSigningKeyPassPhraseEncrypted(signingKeyPassPhraseEncrypted) isUsingHTTPS='@isUsingHTTPS@' twoWaySSLEnabled='@twoWaySSLEnabled@' if isUsingHTTPS == 'true': cmo.setITSRequiresSSL(true) cmo.setARSRequiresSSL(true) if twoWaySSLEnabled == 'true': cmo.setARSRequiresTwoWaySSL(true) else: cmo.setITSRequiresSSL(false) cmo.setARSRequiresSSL(false) cmo.setSourceSiteEnabled(true) # Configure SSL def configSSL(AdminServerName): cd('/Servers') cd(AdminServerName) cmo.setKeyStores('CustomIdentityAndCustomTrust') cmo.setCustomTrustKeyStoreFileName('@certsDir@/company1IdPTrust.jks') customTrustKeyStorePassPhraseEncrypted=encrypt('company1IdPTrustKeyStorePassPhrase', '@domainPath@') cmo.setCustomTrustKeyStorePassPhraseEncrypted(customTrustKeyStorePassPhraseEncrypted) cmo.setCustomIdentityKeyStoreFileName('@certsDir@/company1IdPIdentity.jks') customIdentityKeyStorePassPhraseEncrypted=encrypt('company1IdPIdentityKeyStorePassPhrase', '@domainPath@') cmo.setCustomIdentityKeyStorePassPhraseEncrypted(customIdentityKeyStorePassPhraseEncrypted) create(AdminServerName, 'SSL') cd('/Servers/' + AdminServerName + '/SSL') cd(AdminServerName) cmo.setEnabled(true) cmo.setListenPort(int('@sport@')) cmo.setTwoWaySSLEnabled(Boolean('@twoWaySSLEnabled@')) cmo.setClientCertificateEnforced(Boolean('@clientCertificateEnforced@')) cmo.setHostnameVerificationIgnored(false) cmo.setServerPrivateKeyAlias('company1IdPServerKeyAlias') serverPrivateKeyPassPhraseEncrypted=encrypt('company1IdPServerKeyPassPhrase', '@domainPath@') cmo.setServerPrivateKeyPassPhraseEncrypted(serverPrivateKeyPassPhraseEncrypted) # Optional: Create cluster # Create IDP domain readDomain('@domainPath@') configSAML2CM() configSSOService('@adminServerName@') # configSAML11V2CM() configFedService('@adminServerName@') configSSL('@adminServerName@') updateDomain() closeDomain() print 'Domain Updated with Identity Provider configured' exit()
サンプル: SAML SSOによるサービス・プロバイダ・サイトとしてのWebLogic Serverの構成
このサンプルWLSTスクリプトを開始点として使用して、サービス・プロバイダとして動作するWebLogic ServerインスタンスでSAML 2.0シングル・サインオン(SSO)を構成する独自のスクリプトを作成します。
ノート:
WLSTオフラインを使用してSAML SSOを構成する場合は、IDプロバイダ・パートナのプロパティ・ファイルを作成する必要があります。このプロパティ・ファイルは、フェデレーテッド・パートナに必要な重要なSAML 2.0パートナ・メタデータを指定します。パートナ・プロパティ・ファイルの詳細は、「パートナ・プロパティのインポート」を参照してください。
例C-2 サービス・プロバイダ・サイトとしてのWebLogic Serverの構成とSAML SSOの有効化
プレースホルダ・テキストを実際の値で更新します。プレースホルダ・テキストは@
記号で囲みます。たとえば、@admin_username@
などです。
def getEnvVar(var): val=os.environ.get(var) if val==None: print "ERROR: Env var ",var, " not set." sys.exit(1) return val # Create domain def createDomain(domainName, adminServerName): readTemplate('@templateJar@') set('Name', domainName) setOption('DomainName', domainName) cd('/Servers/AdminServer') set('ListenPort', '@admin_port@') set('Name', adminServerName) cd('/Security/' + domainName + '/User/weblogic') cmo.setName('@admin_username@') cmo.setPassword('@admin_password@') setOption('OverwriteDomain', 'true') writeDomain('@domainPath@') closeTemplate() print 'Domain Created' # Create a cluster def createCluster(clusterName): cd('/') cl=create(clusterName, 'Cluster') cluster_type='@cluster_type@' number_of_ms=int('@number_of_ms@') managed_server_name_base='@managed_server_name_base@' managed_server_name_base_svc='@managed_server_name_base_svc@' if cluster_type == "CONFIGURED": for index in range(0, number_of_ms): cd('/') msIndex = index+1 name = managed_server_name_base + msIndex name_svc = managed_server_name_base_svc + msIndex create(name, 'Server') cd('/Servers/' + name + '/') print('managed server name is ' + name) set('ListenPort', '@server_port@') set('NumOfRetriesBeforeMSIMode', 0) set('RetryIntervalBeforeMSIMode', 1) set('Cluster', clusterName) else: print('Configuring Dynamic Cluster ' + clusterName) templateName = '@cluster_name@-template' print('Creating Server Template: ' + templateName) st1=create(templateName, 'ServerTemplate') print('Done creating Server Template: ' + templateName) cd('/ServerTemplates/' + templateName) cmo.setListenPort('@server_port@') cmo.setCluster(cl) print('Done setting attributes for Server Template: ' + templateName); cd('/Clusters/' + clusterName) create(clusterName, 'DynamicServers') cd('DynamicServers/' + clusterName) set('ServerTemplate', st1) set('ServerNamePrefix', managed_server_name_base) set('DynamicClusterSize', number_of_ms) set('MaxDynamicClusterSize', number_of_ms) set('CalculatedListenPorts', false) print('Done setting attributes for Dynamic Cluster: ' + clusterName); # Configure SAML Authentication Provider def configSAMLAtn(): cd('/SecurityConfiguration/@domainName@/Realms/@realmName@') samlatn = create('@samlAtnName@', 'weblogic.security.providers.saml.SAMLAuthenticator', 'AuthenticationProvider') samlatn.setControlFlag('SUFFICIENT') # Configure SAML2 Identity Asserter def configSAML2IA(): cd('/SecurityConfiguration/@domainName@/Realms/@realmName@') create('@saml2IAName@', 'com.bea.security.saml2.providers.SAML2IdentityAsserter', 'AuthenticationProvider') cd('AuthenticationProvider') cd('@saml2IAName@') # cmo.setReplicatedCacheEnabled(Boolean('@replicatedCacheEnabled@')) def reConfigDefaultAtn(): cd('/SecurityConfiguration/@domainName@/Realms/@realmName@') delete('DefaultAuthenticator', 'AuthenticationProvider') delete('DefaultIdentityAsserter','AuthenticationProvider') defaultAtn=create('DefaultAuthenticator', 'weblogic.security.providers.authentication.DefaultAuthenticator', 'AuthenticationProvider') defaultAtn.setControlFlag('REQUIRED') create('DefaultIdentityAsserter', 'weblogic.security.providers.authentication.DefaultIdentityAsserter', 'AuthenticationProvider') # Configure SAML1.1 V2 Identity Asserter def configSAML11V2IA(): cd('/SecurityConfiguration/@domainName@/Realms/@realmName@') create('@saml11IAName@', 'weblogic.security.providers.saml.SAMLIdentityAsserterV2', 'AuthenticationProvider') cd('AuthenticationProvider') cd('@saml11IAName@') # Configure SAML2 SSO Service def configSSOService(AdminServerName): cd('/Server') cd(AdminServerName) create(AdminServerName, 'SingleSignOnServices') cd('SingleSignOnServices') cd(AdminServerName) cmo.setContactPersonGivenName('401kContactPersonGivenName') cmo.setContactPersonSurName('401kContactPersonSurName') cmo.setContactPersonType('technical') cmo.setContactPersonCompany('401kContactPersonCompany') cmo.setContactPersonTelephoneNumber('401kContactPersonTelephoneNumber') cmo.setContactPersonEmailAddress('401kContactPersonEmailAddress') cmo.setOrganizationName('401kOrganizationName') cmo.setOrganizationURL('401kOrganizationURL') cmo.setEntityID('@url@/401ksp_entityid') cmo.setPublishedSiteURL('@url@/saml2') cmo.setServiceProviderPOSTBindingEnabled(true) cmo.setServiceProviderArtifactBindingEnabled(true) cmo.setServiceProviderPreferredBinding('HTTP/POST') cmo.setSSOSigningKeyAlias('401kSPSSOSigningKeyAlias') ssoSigningKeyPassPhraseEncrypted=encrypt('401kSPSSOSigningKeyPassPhrase', '@domainPath@') cmo.setSSOSigningKeyPassPhraseEncrypted(ssoSigningKeyPassPhraseEncrypted) twoWaySSLEnabled='@twoWaySSLEnabled@' if twoWaySSLEnabled == 'true': cmo.setTransportLayerSecurityKeyAlias('401kSPTLSKeyAlias') transportLayerSecurityKeyPassPhraseEncrypted=encrypt('401kSPTLSKeyPassPhrase', '@domainPath@') cmo.setTransportLayerSecurityKeyPassPhraseEncrypted(transportLayerSecurityKeyPassPhraseEncrypted) cmo.setServiceProviderEnabled(true) print "SP Service configured." # Configure SAML1.1 Federation Service def configFedService(AdminServerName): cd('/Server') cd(AdminServerName) create(AdminServerName, 'FederationServices') cd('FederationServices') cd(AdminServerName) isUsingHTTPS='@isUsingHTTPS@' if isUsingHTTPS == 'true': cmo.setACSRequiresSSL(true) else: cmo.setACSRequiresSSL(false) cmo.setDestinationSiteEnabled(true) # Configure Keystores def configSSL(AdminServerName): cd('/Servers') cd(AdminServerName) cmo.setKeyStores('CustomIdentityAndCustomTrust') cmo.setCustomTrustKeyStoreFileName('@certsDir@/401kSPTrust.jks') customTrustKeyStorePassPhraseEncrypted=encrypt('401kSPTrustKeyStorePassPhrase', '@domainPath@') cmo.setCustomTrustKeyStorePassPhraseEncrypted(customTrustKeyStorePassPhraseEncrypted) cmo.setCustomIdentityKeyStoreFileName('@certsDir@/401kSPIdentity.jks') customIdentityKeyStorePassPhraseEncrypted=encrypt('401kSPIdentityKeyStorePassPhrase', '@domainPath@') cmo.setCustomIdentityKeyStorePassPhraseEncrypted(customIdentityKeyStorePassPhraseEncrypted) create(AdminServerName, 'SSL') cd('/Servers/' + AdminServerName + '/SSL') cd(AdminServerName) cmo.setEnabled(true) cmo.setListenPort(int('@sport@')) cmo.setTwoWaySSLEnabled(Boolean('@twoWaySSLEnabled@')) cmo.setClientCertificateEnforced(Boolean('@clientCertificateEnforced@')) cmo.setHostnameVerificationIgnored(false) cmo.setServerPrivateKeyAlias('401kSPServerKeyAlias') serverPrivateKeyPassPhraseEncrypted=encrypt('401kSPServerKeyPassPhrase', '@domainPath@') cmo.setServerPrivateKeyPassPhraseEncrypted(serverPrivateKeyPassPhraseEncrypted) # Open the existing domain and configure SP createDomain = '@createDomain@' createCluster = '@createCluster@' if createDomain == 'true': createDomain('@domainName@', '@adminServerName@') readDomain('@domainPath@') if createCluster == 'true': createCluster('@clusterName@') configSAMLAtn() configSAML2IA() reConfigDefaultAtn() configSSOService('@adminServerName@') configFedService('@adminServerName@') configSSL('@adminServerName@') updateDomain() closeDomain() print 'Domain Updated with Service Provider Configured' exit()