Keycloak 和 Spring Security
Posted
技术标签:
【中文标题】Keycloak 和 Spring Security【英文标题】:Keycloak and Spring Security 【发布时间】:2016-03-20 21:39:32 【问题描述】:谁能告诉我如何迁移keycloak和spring security。我已经按照http://keycloak.github.io/docs/userguide/keycloak-server/html/ch08.html#spring-security-adapter 中的步骤进行操作。但它不起作用。我需要编写自己的提供程序吗?
我原来的 spring-security.xml
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.2.xsd"
>
<http use-expressions="true">
<intercept-url pattern="/index" access="isAuthenticated()" />
<intercept-url pattern="/tasks" access="isAuthenticated()" />
<intercept-url pattern="/dashboard" access="isAuthenticated()" />
<intercept-url pattern="/resetPassword" access="isAuthenticated()" />
<intercept-url pattern="/settings/**" access="isAuthenticated()" />
<intercept-url pattern="/" access="isAuthenticated()" />
<intercept-url pattern="/sam/**" access="hasRole('mym_security_permission-002')" />
<intercept-url pattern="/admin/**" access="hasRole('mym_security_permission-005')" />
<intercept-url pattern="/committee/**" access="isAuthenticated()" />
<intercept-url pattern="/member/**" access="isAuthenticated()" />
<intercept-url pattern="/attachment/download/**" access="isAuthenticated()" />
<!-- access denied page -->
<access-denied-handler error-page="/403" />
<form-login
login-page="/login"
login-processing-url="/perform_login"
authentication-failure-url="/login?error"
authentication-success-handler-ref="customAuthenticationSuccessHandler"
username-parameter="username"
password-parameter="password"
always-use-default-target="true"
/>
<!--success-handler-ref="customLogoutSuccessHandler" -->
<logout
logout-url="/perform_logout"
delete-cookies="true"
invalidate-session="true"
/>
<!-- enable csrf protection -->
<csrf/>
<session-management>
<concurrency-control max-sessions="1" />
</session-management>
</http>
<authentication-manager alias="authenticationManager" erase-credentials="false">
<authentication-provider ref="customAuthenticationProvider" />
</authentication-manager>
</beans:beans>
我将此 xml 更改为 keycloak 用户指南提供的 xml。我把 keycloak.json 放在 web-inf 中。
在我对 keycloak 进行配置之后。我尝试访问我的页面,然后会出现如下错误页面:
我们很抱歉...
无效参数:redirect_uri
返回网址:http://localhost:8080/auth/realms/Meeting/protocol/openid-connect/auth?response_type=code&client_id=mym-apps&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2FApp%2Fsso%2Flogin&state=0%2Fd21c7ae9-b041-43e5-8135-8150e9895ee5&login=true
【问题讨论】:
那你没有按照相应的步骤操作或者使用不同的框架,你是用Spring boot吗? 我 100% 遵循该步骤。目前我使用spring mvc + spring security。 如果你这样做了,那么你一定会错过一些东西。还有什么不起作用,发布一些代码和配置。请阅读***.com/help/how-to-ask 并使用该信息来改进您的问题。 我已经编辑了我的问题。上面是我的 spring-security.xml,但后来我将它更改为 .xml 配置,就像在那个链接上一样。 请澄清什么不起作用?另外你的url-mappings
是错误的....../admin/**
也匹配/admin/setup/**
所以基本上后者对于其他映射是无用的。映射按照指定的顺序进行查询,它们没有排序或最佳匹配。此外,您只添加了您的原始版本,有趣的是修改后的版本,因为那是您想要使用的版本。
【参考方案1】:
我已经解决了这个问题。我只是将我的“有效重定向 URI”修复为 http://localhost:8080/app/* 和 /app/*
【讨论】:
【参考方案2】:请在keycloak客户端中添加web orgs
【讨论】:
我建议你先使用评论部分。以上是关于Keycloak 和 Spring Security的主要内容,如果未能解决你的问题,请参考以下文章
Spring 3.0 - 无法找到 XML 模式命名空间的 Spring NamespaceHandler [http://www.springframework.org/schema/securit