Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于Web应用程序的Spring Oauth_Spring_Spring Security_Spring Security Oauth2 - Fatal编程技术网

用于Web应用程序的Spring Oauth

用于Web应用程序的Spring Oauth,spring,spring-security,spring-security-oauth2,Spring,Spring Security,Spring Security Oauth2,我有一个问题,我正在努力找到一个像样的答案,希望通过说出这个问题,有人能够引导我或建议我朝着正确的方向前进 我们当前的所有web应用程序都是使用Spring构建的,其中当然包括由Spring安全模块处理的安全性。 我们正在探索将一些新的android项目集成到这些web应用程序中的机会 经过一些研究和指导,所有标志都指向Android应用程序中的OAuth2实现,并使用它通过Restfull调用访问web应用程序服务器的相关部分 我现在试图理解的是,我们是否可以也应该在web应用程序中替换现有的

我有一个问题,我正在努力找到一个像样的答案,希望通过说出这个问题,有人能够引导我或建议我朝着正确的方向前进

我们当前的所有web应用程序都是使用Spring构建的,其中当然包括由Spring安全模块处理的安全性。 我们正在探索将一些新的android项目集成到这些web应用程序中的机会

经过一些研究和指导,所有标志都指向Android应用程序中的OAuth2实现,并使用它通过Restfull调用访问web应用程序服务器的相关部分

我现在试图理解的是,我们是否可以也应该在web应用程序中替换现有的Spring安全实现,并用Spring Oauth2等效物替换它

总体目标是能够有一个单一的安全解决方案,我们可以将其用于网站登录、应用程序登录和任何将暴露于其他web应用程序的API实现


如果任何人也能提供到Spring Oauth2 Java配置(非XML)设置的链接,在该设置中,用户登录并基于其角色以无效的方式访问页面,也将非常有用。我们发现的大多数示例要么极其复杂,只关注restfull调用,要么只关注XML配置。

您似乎没有听说过spring云安全项目,它极大地简化了与oauth2提供商的工作。看看:

github(上页右侧)提供了一些示例。它展示了如何设置,以防您只想使用一个oauth2提供程序检查项目,该项目展示了如何为github进行设置。您可以通过
application.yml
file+add
@enableAuth2sso
注释中的配置来完成大部分工作,从而启动所有机器

对于与web应用程序的“正常”交互来说,这是非常困难的。如果您需要您的应用程序作为其他应用程序的api,那么您必须维护令牌,将它们添加到请求等。如果您的api的客户端也是您可以更改的代码,那么您可以使用
OAuth2RestTemplate
类来处理令牌,因此您可以像往常一样/不安全的端点一样查询您的api

例如,如果需要为不同的路径使用两个不同的提供程序,则更复杂的是,您必须将它们全部配置为:

@Bean
public OAuth2RestTemplate facebookOAuth2RestTemplate(OAuth2ClientContext clientContext) {
    return new OAuth2RestTemplate(facebookOAuth2ResourceDetails(), clientContext);
}

@Bean
public OAuth2ProtectedResourceDetails facebookOAuth2ResourceDetails() {
    AuthorizationCodeResourceDetails resource = new AuthorizationCodeResourceDetails();
    resource.setAccessTokenUri(tokenUri);
    resource.setId("id");
    resource.setUserAuthorizationUri(authorizationUri);
    resource.setUseCurrentUri(false);
    resource.setPreEstablishedRedirectUri(redirectUri);
    resource.setClientId(clientId);
    resource.setClientSecret(clientSecret);
    resource.setTokenName("tokenname");
    resource.setAuthenticationScheme(AuthenticationScheme.query);
    resource.setClientAuthenticationScheme(AuthenticationScheme.form);

    return resource;
}
并决定在哪种情况下使用
OAuth2RestTemplate
的哪个实例

//更新

如果您想通过某些oauth2提供商与授权用户交换spring security core,您可以扩展
OAuth2ssoconfigureAdapter
class:

@Configuration
@EnableOAuth2Sso
public class WebSecurityConfig extends OAuth2SsoConfigurerAdapter {

@Override
public void match(RequestMatchers matchers) {
  matchers.antMatchers("/admin");
}

@Override
public void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .antMatchers("/admin").hasRole("ADMIN")
            .and()
            .logout().logoutUrl("/logout").permitAll()
            .logoutSuccessUrl("/");
}
因此/admin现在将受到保护,用户将重定向到您指定的任何授权服务器。它需要在
application.yml
中进行oauth配置

 spring:
    oauth2:
    client: # Sauron
      clientId: app_clientid
      clientSecret: app_secret
      accessTokenUri: http://authorizationserver/oauth/token
      userAuthorizationUri: http://authorizationserver/oauth/authorize
      clientAuthenticationScheme: header
    resource:
      tokenInfoUri: http://authorizationserver/oauth/check_token
      preferTokenInfo: false

这就是为什么我之前写过,它很容易使用一台auhorization服务器,但如果您需要更多,它会更复杂。

您似乎没有听说过spring云安全项目,它极大地简化了与oauth2提供商的工作。看看:

github(上页右侧)提供了一些示例。它展示了如何设置,以防您只想使用一个oauth2提供程序检查项目,该项目展示了如何为github进行设置。您可以通过
application.yml
file+add
@enableAuth2sso
注释中的配置来完成大部分工作,从而启动所有机器

对于与web应用程序的“正常”交互来说,这是非常困难的。如果您需要您的应用程序作为其他应用程序的api,那么您必须维护令牌,将它们添加到请求等。如果您的api的客户端也是您可以更改的代码,那么您可以使用
OAuth2RestTemplate
类来处理令牌,因此您可以像往常一样/不安全的端点一样查询您的api

例如,如果需要为不同的路径使用两个不同的提供程序,则更复杂的是,您必须将它们全部配置为:

@Bean
public OAuth2RestTemplate facebookOAuth2RestTemplate(OAuth2ClientContext clientContext) {
    return new OAuth2RestTemplate(facebookOAuth2ResourceDetails(), clientContext);
}

@Bean
public OAuth2ProtectedResourceDetails facebookOAuth2ResourceDetails() {
    AuthorizationCodeResourceDetails resource = new AuthorizationCodeResourceDetails();
    resource.setAccessTokenUri(tokenUri);
    resource.setId("id");
    resource.setUserAuthorizationUri(authorizationUri);
    resource.setUseCurrentUri(false);
    resource.setPreEstablishedRedirectUri(redirectUri);
    resource.setClientId(clientId);
    resource.setClientSecret(clientSecret);
    resource.setTokenName("tokenname");
    resource.setAuthenticationScheme(AuthenticationScheme.query);
    resource.setClientAuthenticationScheme(AuthenticationScheme.form);

    return resource;
}
并决定在哪种情况下使用
OAuth2RestTemplate
的哪个实例

//更新

如果您想通过某些oauth2提供商与授权用户交换spring security core,您可以扩展
OAuth2ssoconfigureAdapter
class:

@Configuration
@EnableOAuth2Sso
public class WebSecurityConfig extends OAuth2SsoConfigurerAdapter {

@Override
public void match(RequestMatchers matchers) {
  matchers.antMatchers("/admin");
}

@Override
public void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .antMatchers("/admin").hasRole("ADMIN")
            .and()
            .logout().logoutUrl("/logout").permitAll()
            .logoutSuccessUrl("/");
}
因此/admin现在将受到保护,用户将重定向到您指定的任何授权服务器。它需要在
application.yml
中进行oauth配置

 spring:
    oauth2:
    client: # Sauron
      clientId: app_clientid
      clientSecret: app_secret
      accessTokenUri: http://authorizationserver/oauth/token
      userAuthorizationUri: http://authorizationserver/oauth/authorize
      clientAuthenticationScheme: header
    resource:
      tokenInfoUri: http://authorizationserver/oauth/check_token
      preferTokenInfo: false

这就是为什么我之前写过这样一篇文章:只需一台auhorization服务器就可以轻松使用,但如果您需要更多,那么它就更复杂了。

谢谢@freakman,我刚才确实看到了这一点,但不幸的是,这无助于回答我的问题。Oauth2是否可以在不使用restfull调用的情况下替换标准spring安全性,即浏览器在非restfull方法下进行的正常调用。或者它应该作为一个单独的实体实现,仅用于api调用(注意,我们不会使用第三方授权人。我们希望创建自己的服务器,其连接到该服务器),它可以作为“正常”spring安全性来保护您的控制器-此示例显示如下:。更多更新。谢谢@freakman,我实际上在几天前看到了这一点,但不幸的是,这无助于回答我的问题。Oauth2是否可以在不使用restfull调用的情况下替换标准spring安全性,即浏览器在非restfull方法下进行的正常调用。或者它应该作为一个单独的实体实现,仅用于api调用(注意,我们不会使用第三方授权人。我们希望创建自己的服务器,其连接到该服务器),它可以作为“正常”spring安全性来保护您的控制器-此示例显示如下:。更多更新。