2016-04-29 8 views
0

EARアプリケーションで作成されたさまざまなWAR内でSSOを実行する必要があります。私はここに提供されたデモをhttps://github.com/pac4j/buji-pac4j-demoにし、デモで提供されているのとまったく同じ方法でEAR内の各WARに各shiro.iniを設定しました。私は同じ資格情報を持つsamlKeystore.jksというリソースを使用していて、同じokta(リソース:metadata-okta.xml)IDPに接続しようとしています。ただし、「SAMLによる保護されたURL:saml/index.jsp」リンクをクリックしたときに、このエラーが発生しています。pac4j-samlを使用すると、shiro.iniの設定に基づいてspメタデータを取得する方法

20:04:11,460 ERROR [io.undertow.request](デフォルトタスク-13)UT005023:/MyWebA/saml/index.jspに対する例外処理要求:javax.servlet.ServletException:org.pac4j.s​​aml.exceptions.SAMLException:Keystoreには、org.apache.shiro.webの秘密鍵がありません 。 servlet.AdviceFilter.cleanup org.apache.shiro.web.servlet.AdviceFilter.doFilterInternalで(AdviceFilter.java:196) (AdviceFilter.java:148)

....に起因

:ORG .pac4j.s​​aml.exceptions.SAMLException:キーストアにはorg.pac4j.s​​aml.crypto.KeyStoreCredentialProvider.getPrivateKeyAlias(KeyStoreCredentialProvider.java:175)org.pac4j.s​​aml.crypto.KeyStoreCredentialProviderで で何の秘密鍵ません 。(KeyStoreCredentialProvider.java:98)org.pac4j.s​​amlで 。 crypto.KeyStoreCredentialProvider。(KeyStoreCredentialProvider.java:105)

これは、リソースフォルダに実際にsamlKeystore.jksがあるので、これは奇妙です。

私の質問は以下のとおりです。

1)なぜ私はデモに付属の同じキーストアを使用していていても、「キーストアには何の秘密鍵を持っていない」の問題を取得していますか?ところで、デモをそのまま実行してもこの問題はありませんでした。

2)IDPを自分で設定したいのですが、自分のEARアプリケーションを説明するSPメタデータが必要です。 shiro.iniには、この設定がsaml2Config.serviceProviderMetadataPath = resource:sp-metadata.xmlとして設定されています。しかし、私はsp-metadata.xmlを見つけることができます。 shiro.iniを使用してsp-metadata.xmlを生成するにはどうすればよいですか? buji-pac4jとpac4j-SAMLを使用しておりますので、私はここにhttps://github.com/pac4j/pac4j/wiki/Clients#saml-support

を説明した2つのオプションでのpom.xmlとshiro.ini

で含めるように編集されたことを行うことができる方法を見つけ出すことができませんでした私は私の耳にしている様々なのWAR内SSOを実行したいので、ここで
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
     <modelVersion>4.0.0</modelVersion> 
     <parent> 
     <groupId>MyEARProject</groupId> 
     <artifactId>MyEARProject</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     </parent> 
     <groupId>MyEAR</groupId> 
     <artifactId>MyEAR</artifactId> 
     <packaging>ear</packaging> 
     <properties> 
      <mywebversion>0.0.2</mywebversion> 
      <pac4jVersion>1.8.8</pac4jVersion> 
      <bujiVersion>1.4.2</bujiVersion> 
      <javaVersion>1.8</javaVersion> 
     </properties> 
     <dependencies>  
      <dependency> 
       <groupId>io.buji</groupId> 
       <artifactId>buji-pac4j-servlet</artifactId> 
       <version>${bujiVersion}</version> 
      </dependency> 
      <dependency> 
       <groupId>org.pac4j</groupId> 
       <artifactId>pac4j-oauth</artifactId> 
       <version>${pac4jVersion}</version> 
      </dependency> 
      <dependency> 
       <groupId>org.pac4j</groupId> 
       <artifactId>pac4j-openid</artifactId> 
       <version>${pac4jVersion}</version> 
      </dependency> 
      <dependency> 
       <groupId>org.pac4j</groupId> 
       <artifactId>pac4j-cas</artifactId> 
       <version>${pac4jVersion}</version> 
      </dependency> 
      <dependency> 
       <groupId>org.pac4j</groupId> 
       <artifactId>pac4j-http</artifactId> 
       <version>${pac4jVersion}</version> 
      </dependency> 
      <dependency> 
       <groupId>org.pac4j</groupId> 
       <artifactId>pac4j-saml</artifactId> 
       <version>${pac4jVersion}</version> 
      </dependency> 
      <dependency> 
       <groupId>org.pac4j</groupId> 
       <artifactId>pac4j-oidc</artifactId> 
       <version>${pac4jVersion}</version> 
      </dependency> 
      <dependency> 
       <groupId>org.pac4j</groupId> 
       <artifactId>pac4j-gae</artifactId> 
       <version>${pac4jVersion}</version> 
      </dependency> 
      <dependency> 
       <groupId>org.pac4j</groupId> 
       <artifactId>pac4j-ldap</artifactId> 
       <version>${pac4jVersion}</version> 
      </dependency> 
      <dependency> 
       <groupId>org.pac4j</groupId> 
       <artifactId>pac4j-sql</artifactId> 
       <version>${pac4jVersion}</version> 
      </dependency> 
      <dependency> 
       <groupId>org.pac4j</groupId> 
       <artifactId>pac4j-mongo</artifactId> 
       <version>${pac4jVersion}</version> 
      </dependency> 
      <dependency> 
       <groupId>org.pac4j</groupId> 
       <artifactId>pac4j-stormpath</artifactId> 
       <version>${pac4jVersion}</version> 
      </dependency> 
      <dependency> 
       <groupId>ch.qos.logback</groupId> 
       <artifactId>logback-classic</artifactId> 
       <version>1.0.13</version> 
      </dependency> 

      <dependency> 
       <groupId>javax.servlet</groupId> 
       <artifactId>javax.servlet-api</artifactId> 
       <version>3.0.1</version> 
       <scope>provided</scope> 
      </dependency> 
      <dependency> 
       <groupId>javax.servlet.jsp</groupId> 
       <artifactId>jsp-api</artifactId> 
       <version>2.2</version> 
       <scope>provided</scope> 
      </dependency> 
     <dependency> 
      <groupId>net.sf.ehcache</groupId> 
      <artifactId>ehcache-core</artifactId> 
      <version>2.5.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.shiro</groupId> 
      <artifactId>shiro-ehcache</artifactId> 
      <version>1.2.4</version> 
      <scope>provided</scope> 
     </dependency  
      <dependency> 
       <groupId>com.my</groupId> 
       <artifactId>webApp1</artifactId> 
       <version>${mywebversion}</version> 
       <type>war</type> 
      </dependency> 
      <dependency> 
       <groupId>com.my</groupId> 
       <artifactId>webAppRest</artifactId> 
       <version>${mywebversion}</version> 
       <type>war</type> 
      </dependency> 
      <dependency> 
       <groupId>com.my</groupId> 
       <artifactId>webApp2</artifactId> 
       <version>${mywebversion}</version> 
       <type>war</type> 
      </dependency> 
     </dependencies> 
    </project> 

は私shiro.ini設定

[main] 
############################################################################ 
# PROVIDERS : 
############################################################################ 
#sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager 
#sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO 
#sessionManager.sessionDAO = $sessionDAO 
#cookie = org.apache.shiro.web.servlet.SimpleCookie 
#cookie.name = SSOcookie 
#cookie.path =/
#cookie.domain = localhost 
#sessionManager.sessionIdCookie = $cookie 
#securityManager.sessionManager = $sessionManager 
#cacheManager = org.apache.shiro.cache.ehcache.EhCacheManager 
#cacheManager.cacheManagerConfigFile = classpath:ehcache.xml 
#securityManager.cacheManager = $cacheManager 
#securityManager.sessionMode = native 
#Para testing: 
#ssl.enabled=false  
subjectFactory = io.buji.pac4j.ClientSubjectFactory 
securityManager.subjectFactory = $subjectFactory  
facebookClient = org.pac4j.oauth.client.FacebookClient 
facebookClient.key = 145278422258960 
facebookClient.secret = be21409ba8f39b5dae2a7de525484da8  
twitterClient = org.pac4j.oauth.client.TwitterClient 
twitterClient.key = CoxUiYwQOSFDReZYdjigBA 
twitterClient.secret = 2kAzunH5Btc4gRSaMr7D7MkyoJ5u1VzbOOzE8rBofs  
simpleAuthenticator = org.pac4j.http.credentials.authenticator.test.SimpleTestUsernamePasswordAuthenticator  
formClient = org.pac4j.http.client.indirect.FormClient 
formClient.loginUrl = http://localhost:8080/webApp1/loginForm.jsp 
formClient.authenticator = $simpleAuthenticator  
basicAuthClient = org.pac4j.http.client.indirect.IndirectBasicAuthClient 
basicAuthClient.authenticator = $simpleAuthenticator  
casClient = org.pac4j.cas.client.CasClient 
casClient.casLoginUrl = https://casserverpac4j.herokuapp.com 
#casClient.gateway=true  
vkClient = org.pac4j.oauth.client.VkClient 
vkClient.key = 4224582 
vkClient.secret = nDc4IHTqu8ioFMkHKifq  
saml2Config = org.pac4j.saml.client.SAML2ClientConfiguration 
saml2Config.keystorePath = resource:samlKeystore.jks 
saml2Config.keystorePassword = pac4j-demo-passwd 
saml2Config.privateKeyPassword = pac4j-demo-passwd 
saml2Config.identityProviderMetadataPath = resource:metadata-okta.xml 
saml2Config.maximumAuthenticationLifetime = 3600 
saml2Config.serviceProviderEntityId = http://localhost:8080/webApp1/callback?client_name=SAML2Client 
saml2Config.serviceProviderMetadataPath = resource:sp-metadata.xml  
saml2Client = org.pac4j.saml.client.SAML2Client 
saml2Client.configuration = $saml2Config  
clients = org.pac4j.core.client.Clients 
clients.callbackUrl = http://localhost:8080/webApp1/callback 
clients.clients = $facebookClient,$twitterClient,$formClient,$basicAuthClient,$casClient,$vkClient,$saml2Client  
############################################################################ 
# REALM & FILTERS : 
############################################################################ 
clientsRealm = io.buji.pac4j.ClientRealm 
clientsRealm.defaultRoles = ROLE_USER 
clientsRealm.clients = $clients  
clientsFilter = io.buji.pac4j.ClientFilter 
clientsFilter.clients = $clients 
clientsFilter.failureUrl = /error500.jsp  
facebookRoles = io.buji.pac4j.filter.ClientRolesAuthorizationFilter 
facebookRoles.client = $facebookClient 
twitterRoles = io.buji.pac4j.filter.ClientRolesAuthorizationFilter 
twitterRoles.client = $twitterClient 
formRoles = io.buji.pac4j.filter.ClientRolesAuthorizationFilter 
formRoles.client = $formClient 
basicAuthRoles = io.buji.pac4j.filter.ClientRolesAuthorizationFilter 
basicAuthRoles.client = $basicAuthClient 
casRoles = io.buji.pac4j.filter.ClientRolesAuthorizationFilter 
casRoles.client = $casClient 
vkRoles = io.buji.pac4j.filter.ClientRolesAuthorizationFilter 
vkRoles.client = $vkClient 
saml2Roles = io.buji.pac4j.filter.ClientRolesAuthorizationFilter 
saml2Roles.client = $saml2Client  
[urls] 
/facebook/** = facebookRoles[ROLE_USER] 
/twitter/** = twitterRoles[ROLE_USER] 
/form/** = formRoles[ROLE_USER] 
/basicauth/** = basicAuthRoles[ROLE_USER] 
/cas/** = casRoles[ROLE_USER] 
/vk/** = vkRoles[ROLE_USER] 
/saml/** = saml2Roles[ROLE_USER] 
/callback = clientsFilter 
/logout = logout 
/** = anon 

ですが、私は最初にEhCacheManagerを追加しましたが、その後、私は、次のエラーを得ました。

2016-05-01 22:03:38,126 INFO [org.apache.shiro.web.env.EnvironmentLoader] (ServerService Thread Pool -- 163) Starting Shiro environment initialization. 
2016-05-01 22:03:38,179 ERROR [org.apache.shiro.web.env.EnvironmentLoader] (ServerService Thread Pool -- 163) Shiro environment initialization failed: org.apache.shiro.config.ConfigurationException: Unable to instantiate class [org.apache.shiro.cache.ehcache.EhCacheManager] for object named 'cacheManager'. Please ensure you've specified the fully qualified class name correctly. 
    at org.apache.shiro.config.ReflectionBuilder.createNewInstance(ReflectionBuilder.java:151) 
    at org.apache.shiro.config.ReflectionBuilder.buildObjects(ReflectionBuilder.java:119) 
    at org.apache.shiro.config.IniSecurityManagerFactory.buildInstances(IniSecurityManagerFactory.java:161) 
    at org.apache.shiro.config.IniSecurityManagerFactory.createSecurityManager(IniSecurityManagerFactory.java:124) 
    at org.apache.shiro.config.IniSecurityManagerFactory.createSecurityManager(IniSecurityManagerFactory.java:102) 
    at org.apache.shiro.config.IniSecurityManagerFactory.createInstance(IniSecurityManagerFactory.java:88) 
    at org.apache.shiro.config.IniSecurityManagerFactory.createInstance(IniSecurityManagerFactory.java:46) 
    at org.apache.shiro.config.IniFactorySupport.createInstance(IniFactorySupport.java:123) 
    at org.apache.shiro.util.AbstractFactory.getInstance(AbstractFactory.java:47) 
    at org.apache.shiro.web.env.IniWebEnvironment.createWebSecurityManager(IniWebEnvironment.java:203) 
    at org.apache.shiro.web.env.IniWebEnvironment.configure(IniWebEnvironment.java:99) 
    at org.apache.shiro.web.env.IniWebEnvironment.init(IniWebEnvironment.java:92) 
    at org.apache.shiro.util.LifecycleUtils.init(LifecycleUtils.java:45) 
    at org.apache.shiro.util.LifecycleUtils.init(LifecycleUtils.java:40) 
    at org.apache.shiro.web.env.EnvironmentLoader.createEnvironment(EnvironmentLoader.java:221) 
    at org.apache.shiro.web.env.EnvironmentLoader.initEnvironment(EnvironmentLoader.java:133) 
    at org.apache.shiro.web.env.EnvironmentLoaderListener.contextInitialized(EnvironmentLoaderListener.java:58) 
    at io.undertow.servlet.core.ApplicationListeners.contextInitialized(ApplicationListeners.java:187) 
    at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:198) 
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:100) 
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:82) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
    at org.jboss.threads.JBossThread.run(JBossThread.java:320) 
Caused by: org.apache.shiro.util.UnknownClassException: Unable to load class named [org.apache.shiro.cache.ehcache.EhCacheManager] from the thread context, current, or system/application ClassLoaders. All heuristics have been exhausted. Class could not be found. 
    at org.apache.shiro.util.ClassUtils.forName(ClassUtils.java:148) 
    at org.apache.shiro.util.ClassUtils.newInstance(ClassUtils.java:164) 
    at org.apache.shiro.config.ReflectionBuilder.createNewInstance(ReflectionBuilder.java:144) 
    ... 26 more 

Buji-pac4jは、WAR付きSSOのEhCache構成で動作しますか?

答えて

0

1)私はこのエラーに遭遇したことはありません。最新のpac4j-samlバージョンを使用してみることができますか?プライベートキーの選択アルゴリズムが改善された1.8.8を意味しますか?

2)SPメタデータは、定義したSAML2コンフィグレーションに従って生成され、serviceProviderMetadataPathプロパティに基づいて配置されます。適切な設定を生成するようにSAML2Configurationを変更してください

+0

こんにちはJleleu、私は1.8.8に変更しましたが、まだ運がない - 2つの問題は解決されません。オリジナルの投稿を編集して、pom.xmlとshiro.iniを追加しました。私はEARでWARを使ってSSOをしたいので、私はEhCacheを設定しましたが、上記のエラーだけを取得しました。 EhCacheはbuji-pac4jで設定可能ですか? – Mode

+0

buji-pac4jはShiroセッションに依存しているので、EhCacheを使用できるはずです – jleleu

関連する問題