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()