我正在尝试使用简单的Spring OAuth2 SSO应用程序,但我无法这样做.以下是发生的事情的步骤和结果:
/user,由OAuth2保护然后,我在OAuth2 SSO应用程序上获得了一个白标错误页面,其中包含以下内容:
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Mon Jul 13 08:19:18 EDT 2015
There was an unexpected error (type=Unauthorized, status=401).
Authentication Failed: Could not obtain access token
Run Code Online (Sandbox Code Playgroud)授权码位于URL中.以下是示例网址:
http://localhost:8083/login?code=9s63rU&state=Fo9S2M
Run Code Online (Sandbox Code Playgroud)
我没有看到HTTP POST授权服务器/oauth/token端点获取JWT.我通过/trace授权服务器上的端点验证了这一点.
异常堆栈是:
2015-07-13 08:23:32.695 DEBUG 3516 --- [nio-8083-exec-7] o.s.s.w.u.matcher.AntPathRequestMatcher : Checking match of request : '/login'; against '/css/**'
2015-07-13 08:23:32.695 …Run Code Online (Sandbox Code Playgroud) spring spring-security spring-boot spring-security-oauth2 spring-cloud
所以我从Dave Syer的这个例子中得到了以下授权服务器
@SpringBootApplication
public class AuthserverApplication {
public static void main(String[] args) {
SpringApplication.run(AuthserverApplication.class, args);
}
/* added later
@Configuration
@Order(Ordered.HIGHEST_PRECEDENCE)
protected static class MyWebSecurity extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http //.csrf().disable()
.authorizeRequests()
.antMatchers(HttpMethod.OPTIONS, "/oauth/token").permitAll();
}
}*/
@Configuration
@EnableAuthorizationServer
protected static class OAuth2AuthorizationConfig extends
AuthorizationServerConfigurerAdapter {
@Autowired
private AuthenticationManager authenticationManager;
@Bean
public JwtAccessTokenConverter jwtAccessTokenConverter() {
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
KeyPair keyPair = new KeyStoreKeyFactory(
new ClassPathResource("keystore.jks"), "foobar".toCharArray())
.getKeyPair("test");
converter.setKeyPair(keyPair);
return converter; …Run Code Online (Sandbox Code Playgroud) 我正在使用Spring Security OAuth2并且当前实现了client_credentials和密码授予类型.我注意到客户既有范围又有权限.有人可以解释一下有什么区别吗?更具体地说,我正在使用JDBCTokenStore,而数据库模式有一个oauth_client_details表.
也,
在oauth_client_details表中,我不确定以下字段用于:
web_server_redirect_url,access_token_validity,refresh_token_validity
一些澄清将非常有帮助和赞赏.
我正在编写一个简单的应用程序来测试 Oauth。但是我看到两个注释 @EnableResourceServer @EnableAuthorizationServer 都被弃用了!
我没有找到处理它的替代方法,也没有在任何地方找到任何信息。
配置资源服务器和身份验证服务器的最新方法是什么?
谢谢!
我们使用username-password grant从我们的auth服务器获取访问令牌.我们希望使用提供的刷新令牌在访问令牌到期之前刷新访问令牌,直到用户注销或关闭客户端应用程序.
但是我找不到任何关于如何发出此刷新令牌请求的示例.
要获得令牌,我们称之为:
curl -v --data "grant_type=password&username=user&password=pass&client_id=my_client" http://localhost:8080/oauth/token
Run Code Online (Sandbox Code Playgroud)
所以要刷新我希望调用看起来像这样:
curl -v --data "grant_type=refresh_token&access_token=THE_ACCESS_TOKEN&refresh_token=THE_REFRESH_TOKEN" http://localhost:8080/oauth/token
Run Code Online (Sandbox Code Playgroud)
或者可能
curl -v -H "Authorization: Bearer THE_ACCESS_TOKEN" --data "grant_type=refresh_token&refresh_token=THE_REFRESH_TOKEN" http://localhost:8080/oauth/token
Run Code Online (Sandbox Code Playgroud)
但它只会给我一个401 ..
哦是的,也许我需要添加clientId?我不能使用客户端密钥,因为没有(请参阅上面获取令牌的请求).毕竟使用用户名和密码进行身份验证.
我认为我们的服务器配置正确,所以我不会在这里发布.如果我的一个示例请求应该工作,并且您需要查看重要的配置部分,我将添加它们.
谢谢!
spring spring-security access-token oauth-2.0 spring-security-oauth2
我已经实现了Spring社交+ Spring安全性,如Spring安全性示例(以及spring security java config)中所述.我当时报告了几个问题(请参阅https://jira.springsource.org/browse/SEC-2204)所有这些问题都已解决,我的安全性正常.
但是,我想更改我的安全实现并使用RESTful身份验证.Spring oauth/oauth2(http://projects.spring.io/spring-security-oauth/)解决了这个问题,但我看不出Spring Social如何适应这张图片?虽然幕后春天与Facebook/Twitter的社交谈话与oauth,我不认为Spring Social的注册形式和其他特征是为了一个宁静的api而建立的.
任何例子或想法肯定会有所帮助.谢谢.
这篇文章的最新消息:(4/6/2014)
似乎还有很长的路要走,但解决了在主系统上保留用户记录的问题.我很好奇是否有其他方法可以做到这一点?请指教.谢谢
我正在使用Spring Oauth2和Spring Pre-post Annotations使用Spring-boot
我有一个服务班MyService.一个MyService方法是:
@PreAuthorize("#id.equals(authentication.principal.id)")
public SomeResponse getExampleResponse(String id){...}
Run Code Online (Sandbox Code Playgroud)
我能以某种方式控制调用者控制器返回的json吗?
默认返回的json是:
{error : "access_denied" , error_message: ".."}
Run Code Online (Sandbox Code Playgroud)
我希望能够控制error_message参数.我正在寻找类似的东西:
@PreAuthorize(value ="#id.equals(authentication.principal.id)", onError ="throw new SomeException("bad params")")
public SomeResponse getExampleResponse(String id){...}
Run Code Online (Sandbox Code Playgroud)
我想到的一种方法是使用 ExceptionHandler
@ExceptionHandler(AccessDeniedException.class)
public Response handleAccessDeniedException(Exception ex, HttpServletRequest request){
...
}
Run Code Online (Sandbox Code Playgroud)
但我无法控制message异常.而且我不能确定这Exception将在未来的版本中被抛出
spring spring-security spring-annotations spring-boot spring-security-oauth2
在Spring Boot应用程序中,我有一个OAuth2授权/资源服务器.基于此和Spring Security,我已经获得了我的Spring MVC REST API端点.
除此之外,我还想基于第三方OAuth提供商(如Twitter,Facebook,Google)为我的REST端点添加身份验证.
在我的应用程序中,我有两个实体 - User和SocialUser.SocialUser代表社交网络中的用户个人资料 User可以有0-*关联SocialUsers.现在我可以在Twitter上验证用户,之后我在我的数据库中创建两条记录 - User和SocialUser.SocialUser包含Twitter发布的访问/刷新令牌以及来自此社交网络的一些其他配置文件信息.
现在我不知道如何将从社交网络创建的用户与我现有的身份验证\授权流程相关联.对于这个用户,我想创建自己的(由我自己的OAuth2授权服务器)accessToken并将其提供给客户端.
此外,该用户在其实体中没有用户名,密码和电子邮件User.而且我也不知道如何手动创建自己的访问令牌并将其发送到客户端以供将来的API调用.
我找到了一些例子:
@Inject
private TokenEndpoint tokenEndpoint;
public String createAccessToken(User user) {
HashMap<String, String> parameters = new HashMap<String, String>();
parameters.put("client_id", "appid");
parameters.put("client_secret", "myOAuthSecret");
parameters.put("grant_type", "password");
parameters.put("password", user.getPassword());
parameters.put("scope", "read write");
parameters.put("username", user.getUsername());
// principal ??
return tokenEndpoint.getAccessToken(principal, parameters);
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何Principal基于我的User实体创建,我也不确定这是一个正确的方法.
那么,主要的问题是 - 如何通过我自己的OAuth服务器为这个新用户手动生成这个新令牌?
请告诉我如何才能正确实施.谢谢.
更新:
我已添加ProviderSignInController到我的应用程序中,现在能够通过Twitter执行完整的OAuth舞蹈.此外,我已经实现了自己的Neo4jConnectionRepository,Neo4jUsersConnectionRepository因为我使用Neo4j作为主数据库. …
spring-mvc spring-security oauth-2.0 spring-social spring-security-oauth2
让我们考虑一个相当简单的假设应用程序,用户可以在其中阅读或撰写帖子.
有些用户可以阅读和撰写文章,而有些用户只能阅读.使用Spring Security(3.2.1),我通过两个角色对此进行了建模:
使用Spring安全性实现这一点非常简单......
现在,我想通过使用Spring Security OAuth(版本2.0.0.M3 ATM)实现OAuth2提供程序,允许第三方应用程序代表用户读写帖子.
在授权步骤期间,应用程序询问用户是否愿意代表他们授予阅读和/或撰写帖子的权利.这里的用户在这里授予范围(不是角色).
然后,当OAuth2使用者调用我的REST API时,Spring Sec OAuth会授权所授予的令牌并创建一个身份验证,其中包含具有所有角色的用户以及仅授予的作用域.
问题(和问题)是我现在必须编写不同的安全逻辑,具体取决于API是否由正常身份验证的用户调用(只检查角色)或是否通过OAuth2调用(检查角色+范围).
是否可以在Spring Security OAuth2中"合并"角色和范围的概念,以便在授权步骤中,用户向应用程序授予他们拥有的角色的子集(并且让OAuth2身份验证仅在授予的权限中报告这些角色) ?这样,当第三方应用程序进行API调用时,身份验证中的角色是授予的角色?这样我就不必编写任何特定于OAuth2的安全逻辑.
spring oauth spring-security oauth-2.0 spring-security-oauth2
我正在寻找有关如何使用spring security OAuth2实现双因素身份验证(2FA)的想法.要求是用户仅需要对具有敏感信息的特定应用程序进行双因素身份验证.这些webapps有自己的客户端ID.
我想到的一个想法是"误用"范围审批页面以强制用户输入2FA代码/ PIN(或其他).
示例流程如下所示:
不使用和使用2FA访问应用程序
使用2FA直接访问应用
你有其他想法如何计算这个吗?
spring ×6
oauth-2.0 ×3
spring-boot ×2
access-token ×1
cors ×1
jwt ×1
oauth ×1
spring-cloud ×1
spring-mvc ×1