Spring security 客户端和资源服务器的Spring OAuth2 XML配置

Spring security 客户端和资源服务器的Spring OAuth2 XML配置,spring-security,oauth-2.0,spring-oauth2,openid-connect,Spring Security,Oauth 2.0,Spring Oauth2,Openid Connect,有谁能帮我做一个非常基本的XML配置,将我的spring应用程序作为OAuth2/OIDC资源服务器和cilent 我有什么? 具有Spring安全LDAP身份验证的Spring Web MVC应用程序 我想要实现什么? 如果用户试图访问我的应用程序中的任何资源(例如index.html),应该要求他提供凭据(可以是弹出的,也可以是重定向到登录页面) 应用程序应与第三方授权服务器连接,并获取OAuth2访问令牌和刷新令牌 一旦接收到访问令牌,应用程序就应该创建会话并提供第一步中请求的所需资源 当

有谁能帮我做一个非常基本的XML配置,将我的spring应用程序作为OAuth2/OIDC资源服务器和cilent

我有什么?

具有Spring安全LDAP身份验证的Spring Web MVC应用程序

我想要实现什么?

  • 如果用户试图访问我的应用程序中的任何资源(例如index.html),应该要求他提供凭据(可以是弹出的,也可以是重定向到登录页面)
  • 应用程序应与第三方授权服务器连接,并获取OAuth2访问令牌和刷新令牌
  • 一旦接收到访问令牌,应用程序就应该创建会话并提供第一步中请求的所需资源
  • 当用户单击注销或会话过期时,流程从第一步开始
  • 到目前为止我尝试了什么?

    我已经用Spring boot和OIDC试过了。但我正在寻找一些好的参考资料,以通过XML配置实现上述功能。请注意,我不能使用Spring引导或任何java配置

    关于如何开始这一切,有什么想法或建议吗


    谢谢。

    首先,我必须说,你们可以在第节中找到好的例子

    不管怎样,我在不久前玩它的时候已经创建了一个,所以这里是有趣的部分。考虑到你必须从文档中学习一些东西,并钻研代码。。。但我认为这是一个很好的起点

    客户端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" />
    
    
    
    完整的代码片段是

    资源服务器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>
    
    
    ...
    ...
    
    文件可以找到


    我认为这里不是一个解释每一位和字节的好地方,但再一次-在中,你可以找到很好的解释(我设法从中学习了所有内容…

    你提到你希望应用程序成为oauth资源服务器以及客户端应用程序?你确定吗?这没有任何意义。我希望我的后端由Oauth2保护,所以我提到了资源服务器。我还在我的应用程序中托管了一个Angular应用程序,它应该从第三方身份提供商处获得Oauth令牌,所以我提到了客户端。这有意义吗?这实际上是一个很好的问题,因为Spring安全性转换了对Oauth的支持,有些部分没有完全实现。特别是,XML配置不会很快实现。同时,我们使用以前版本的security和5.0.x core。并依靠参考实施