Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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
Java 两条腿(客户端凭据)OAuth2服务器的Spring安全上下文设置_Java_Spring_Spring Security_Oauth 2.0 - Fatal编程技术网

Java 两条腿(客户端凭据)OAuth2服务器的Spring安全上下文设置

Java 两条腿(客户端凭据)OAuth2服务器的Spring安全上下文设置,java,spring,spring-security,oauth-2.0,Java,Spring,Spring Security,Oauth 2.0,如果我想为一个客户机保护REST服务器,SpringSecurityOAuth2的最低设置是什么?我不想使用任何不必要的设置或实现任何不必要的bean。对于SpringSecurity+OAuth2,可能已经有一个“简单”的教程/示例了?(尽管我试图避免对此过于乐观) 我当前的工作设置(使用Sparkr上下文中的copy+past+wtf)感觉太多: 我已经实现了authenticationManager(UserDetailsService),作为实现基本spring安全性的一部分,以便针

如果我想为一个客户机保护REST服务器,SpringSecurityOAuth2的最低设置是什么?我不想使用任何不必要的设置或实现任何不必要的bean。对于SpringSecurity+OAuth2,可能已经有一个“简单”的教程/示例了?(尽管我试图避免对此过于乐观)

我当前的工作设置(使用Sparkr上下文中的copy+past+wtf)感觉太多:


我已经实现了authenticationManager(UserDetailsService),作为实现基本spring安全性的一部分,以便针对我们的数据库持久化帐户和角色


我没有真正得到的豆子是:


userApprovalHandler:为什么我需要在客户端\u凭据流/授权中获得任何用户批准?似乎Sparkr会覆盖默认的
TokenServicesUserApprovalHandler
,以自动批准一个客户端。我的可信客户机和服务器之间的通信也需要这样做吗

oauthAuthenticationEntryPoint:Sparkr为此所做的一切是:


那该怎么办

clientCredentialsTokenEndpointFilter 它说,只有当我想通过请求参数进行身份验证时,我才应该包括这个。。所以我的想法是:向我的服务器发送一个GET(?)请求,并获取一个令牌,然后使用该令牌访问资源?所以我想,对令牌的请求应该包含secret作为请求参数

resourceServerFilter 在我看来,这意味着一个独立的资源服务器?如果我的资源与身份验证提供程序位于同一台服务器上,这将如何应用

accessDecisionManager 我不记得在设置我的定制spring安全实现时必须使用它,为什么我现在要这样做

谢谢你通读!希望有人能回答我的几个问题

更新 我已将设置更新为当前工作状态。我现在可以使用客户端凭据请求访问令牌:

$ curl -X -v -d 'client_id=the_client&client_secret=secret&grant_type=client_credentials' -X POST "http://localhost:9090/our-server/oauth/token"
并使用该令牌访问受保护的资源:

$ curl -H "Authorization: Bearer fdashuds-5432fsd5-sdt5s5d-sd5" "http://localhost:9090/our-server/rest/social/content/posts"
这仍然感觉像是很多设置和我的问题仍然存在。另外,我想知道这是否是保护受信任客户机和REST服务器之间通信的正确方法

除了通过https进行外,对令牌的初始请求仍然感觉不安全,但这就足够了吗

还有令牌本身呢,我应该给它一个较长的生命周期并将其保存在客户机上吗?这在任何情况下都意味着捕获令牌过期异常,然后请求一个新的异常。还是我应该为每个请求都握手?刷新令牌怎么样?我想我在某个地方读到刷新令牌对于客户端凭据授予类型不安全。。?是否需要将令牌作为HTTP头发送,或者我可以更改它?我不想为我们的客户机使用spring安全客户端堆栈,因为它有一个相当传统的设置(jboss 5),到目前为止,我们所做的只是将REST通信功能与请求参数集成在一起

了解更多关于spring安全设置的信息也会有所帮助,但是文档非常少

编辑 已将spring安全配置更新为当前状态。另外,下面是我们的web.xml:


显示名称
上下文配置位置
/WEB-INF/spring-context.xml
org.springframework.web.context.ContextLoaderListener
org.springframework.web.context.request.RequestContextListener
泽西塞尔维特酒店
com.sun.jersey.spi.spring.container.servlet.SpringServlet
com.sun.jersey.config.property.packages
base.package.rest
1.
泽西塞尔维特酒店
/休息/*
appServlet
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
/WEB-INF/servlet-context.xml
2.
appServlet
/*
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
上下文属性
org.springframework.web.servlet.FrameworkServlet.CONTEXT.appServlet
springSecurityFilterChain
/*
注意:上面的spring-security-context.xml将由servlet上下文初始化。spring-context.xml本身只初始化bean。
(另外:我们的服务器也有一些视图,因此所有rest资源都在/rest下运行,因此采用url模式。但是:始终需要有一个单独的servlet和spring上下文。)

userApprovalHandler:如果您的系统中只有一个客户端,我同意用户不必批准它访问他们的数据

oauthAuthenticationEntryPoint:通常,如果身份验证失败,响应类型为JSON。文档中说“如果身份验证失败,并且调用方请求了特定的内容类型响应,则此入口点可以发送一个响应,以及标准的401状态。”

clientCredentialsTokenEndpointFilter:颁发访问令牌是一个两步过程。首先,将用户发送到资源