Spring OAuth2 XML 客户端和资源服务器的配置
Spring OAuth2 XML configuration for Client and Resource Server
任何人都可以帮助我在 XML 中进行非常基本的配置,以将我的 spring 应用程序作为 OAuth2/OIDC 资源服务器和 cilent。
我有什么?
具有 Spring 安全 LDAP 身份验证的 Spring Web MVC 应用程序。
我想达到什么目的?
- 如果用户试图访问我的应用程序中的任何资源(例如 index.html),应该要求他提供凭据(可以是弹出窗口或可以是重定向到登录页面)。
- 应用程序应与第三方授权服务器连接并获取 OAuth2 访问令牌和刷新令牌。
- 收到访问令牌后,应用程序应创建会话并提供第一步中要求的所需资源。
- 当用户点击注销或会话过期时,流程从第一步开始。
到目前为止我尝试了什么?
我已经用 Spring 启动和 OIDC 试过了。但我正在寻找一些很好的参考来实现上述 XML 配置 。请注意,我无法使用 Spring 引导或任何 java 配置。
关于如何开始这一切有什么想法或建议吗?
谢谢。
首先,我必须说您可以在 Spring's oAuth Samples 部分找到很好的例子。
无论如何,我在前一段时间玩的时候创建了一个oAuth-sample-project (GitHub),所以这里是有趣的部分。考虑到您必须从文档中学习一些东西,并钻研代码...但我认为这对于一个起点来说是很好的。
客户端XML:
<sec:http authentication-manager-ref="authenticationManager">
<sec:intercept-url pattern="/secure/**" access="ROLE_USER" />
<sec:anonymous/>
<!-- sec:form-login/-->
<sec:form-login
login-page="/login/login.htm"
authentication-failure-url="/login/login.htm?login_error=1" />
<sec:custom-filter ref="oauth2ClientFilter" after="EXCEPTION_TRANSLATION_FILTER" />
</sec:http>
<sec:authentication-manager alias="authenticationManager">
<sec:authentication-provider user-service-ref="userDetailsService"/>
</sec:authentication-manager>
<sec:user-service id="userDetailsService">
<sec:user name="admin" password="admin" authorities="ROLE_USER,ROLE_ADMIN" />
</sec:user-service>
<!--apply the oauth client context-->
<oauth:client id="oauth2ClientFilter" />
<oauth:resource id="butkecResource"
type="authorization_code"
client-id="${oauth2.client.id}"
client-secret="${oauth2.client.secret}"
access-token-uri="${oauth2.client.accessTokenUri}"
user-authorization-uri="${oauth2.client.userAuthorizationUri}"
scope="read"/>
<!--define an oauth2 resource for facebook. according to the facebook docs, the 'client-id' is the App ID, and the 'client-secret'
is the App Secret -->
<oauth:resource id="facebook"
type="authorization_code"
client-id="233668646673605"
client-secret="33b17e044ee6a4fa383f46ec6e28ea1d"
authentication-scheme="query"
access-token-uri="https://graph.facebook.com/oauth/access_token"
user-authorization-uri="https://www.facebook.com/dialog/oauth"
token-name="oauth_token"
client-authentication-scheme="form" />
完整代码段是 here。
资源服务器XML:
<security:http pattern="/index.html" security="none"/>
<security:http pattern="/browse" security="none"/>
<!-- security:http pattern="/welcome" security="none"/-->
<security:http pattern="/js/**" security="none"/>
<security:http entry-point-ref="oauthAuthenticationEntryPoint"
access-decision-manager-ref="accessDecisionManager">
<security:intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY" />
<security:custom-filter ref="resourceServerFilter" before="PRE_AUTH_FILTER" />
<security:access-denied-handler ref="oauthAccessDeniedHandler" />
<security:anonymous />
</security:http>
...
...
<oauth:resource-server id="resourceServerFilter"
token-services-ref="tokenServices" />
<bean id="tokenServices" class="org.springframework.security.oauth2.provider.token.DefaultTokenServices" >
<property name="tokenStore" ref="tokenStore" />
</bean>
<bean id="tokenStore" class="com.ohadr.oauth.resource_server.token.MyTokenStore" />
<bean id="oauthAuthenticationEntryPoint" class="org.springframework.security.oauth2.provider.error.OAuth2AuthenticationEntryPoint">
<property name="realmName" value="butkec" />
</bean>
可以找到文件here。
我认为这里不是一个解释每一位和字节的好地方,但是再次 - 在 Spring docs 你可以找到很好的解释(我设法从那里学到了所有......)
任何人都可以帮助我在 XML 中进行非常基本的配置,以将我的 spring 应用程序作为 OAuth2/OIDC 资源服务器和 cilent。
我有什么?
具有 Spring 安全 LDAP 身份验证的 Spring Web MVC 应用程序。
我想达到什么目的?
- 如果用户试图访问我的应用程序中的任何资源(例如 index.html),应该要求他提供凭据(可以是弹出窗口或可以是重定向到登录页面)。
- 应用程序应与第三方授权服务器连接并获取 OAuth2 访问令牌和刷新令牌。
- 收到访问令牌后,应用程序应创建会话并提供第一步中要求的所需资源。
- 当用户点击注销或会话过期时,流程从第一步开始。
到目前为止我尝试了什么?
我已经用 Spring 启动和 OIDC 试过了。但我正在寻找一些很好的参考来实现上述 XML 配置 。请注意,我无法使用 Spring 引导或任何 java 配置。
关于如何开始这一切有什么想法或建议吗?
谢谢。
首先,我必须说您可以在 Spring's oAuth Samples 部分找到很好的例子。
无论如何,我在前一段时间玩的时候创建了一个oAuth-sample-project (GitHub),所以这里是有趣的部分。考虑到您必须从文档中学习一些东西,并钻研代码...但我认为这对于一个起点来说是很好的。
客户端XML:
<sec:http authentication-manager-ref="authenticationManager">
<sec:intercept-url pattern="/secure/**" access="ROLE_USER" />
<sec:anonymous/>
<!-- sec:form-login/-->
<sec:form-login
login-page="/login/login.htm"
authentication-failure-url="/login/login.htm?login_error=1" />
<sec:custom-filter ref="oauth2ClientFilter" after="EXCEPTION_TRANSLATION_FILTER" />
</sec:http>
<sec:authentication-manager alias="authenticationManager">
<sec:authentication-provider user-service-ref="userDetailsService"/>
</sec:authentication-manager>
<sec:user-service id="userDetailsService">
<sec:user name="admin" password="admin" authorities="ROLE_USER,ROLE_ADMIN" />
</sec:user-service>
<!--apply the oauth client context-->
<oauth:client id="oauth2ClientFilter" />
<oauth:resource id="butkecResource"
type="authorization_code"
client-id="${oauth2.client.id}"
client-secret="${oauth2.client.secret}"
access-token-uri="${oauth2.client.accessTokenUri}"
user-authorization-uri="${oauth2.client.userAuthorizationUri}"
scope="read"/>
<!--define an oauth2 resource for facebook. according to the facebook docs, the 'client-id' is the App ID, and the 'client-secret'
is the App Secret -->
<oauth:resource id="facebook"
type="authorization_code"
client-id="233668646673605"
client-secret="33b17e044ee6a4fa383f46ec6e28ea1d"
authentication-scheme="query"
access-token-uri="https://graph.facebook.com/oauth/access_token"
user-authorization-uri="https://www.facebook.com/dialog/oauth"
token-name="oauth_token"
client-authentication-scheme="form" />
完整代码段是 here。
资源服务器XML:
<security:http pattern="/index.html" security="none"/>
<security:http pattern="/browse" security="none"/>
<!-- security:http pattern="/welcome" security="none"/-->
<security:http pattern="/js/**" security="none"/>
<security:http entry-point-ref="oauthAuthenticationEntryPoint"
access-decision-manager-ref="accessDecisionManager">
<security:intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY" />
<security:custom-filter ref="resourceServerFilter" before="PRE_AUTH_FILTER" />
<security:access-denied-handler ref="oauthAccessDeniedHandler" />
<security:anonymous />
</security:http>
...
...
<oauth:resource-server id="resourceServerFilter"
token-services-ref="tokenServices" />
<bean id="tokenServices" class="org.springframework.security.oauth2.provider.token.DefaultTokenServices" >
<property name="tokenStore" ref="tokenStore" />
</bean>
<bean id="tokenStore" class="com.ohadr.oauth.resource_server.token.MyTokenStore" />
<bean id="oauthAuthenticationEntryPoint" class="org.springframework.security.oauth2.provider.error.OAuth2AuthenticationEntryPoint">
<property name="realmName" value="butkec" />
</bean>
可以找到文件here。
我认为这里不是一个解释每一位和字节的好地方,但是再次 - 在 Spring docs 你可以找到很好的解释(我设法从那里学到了所有......)