我正在使用Spring Boot + Spring Security OAuth2应用程序,我认为该应用程序的灵感来自Dave Syer的示例.应用程序配置为OAuth2授权服务器,单个公共客户端使用资源所有者密码凭据流.成功的令牌配置为JWT.
公共Angular客户端向/ oauth/token发送一个POST请求,其中包含一个包含客户端ID和密码的基本auth头(这是让客户端进行身份验证的最简单方法,即使秘密不是私有的).请求正文包含用户名,密码和授予类型"密码".
除了作为身份验证服务器之外,该应用程序还是用户,团队和组织的RESTful资源服务器.
我正在尝试使用Spring Social添加额外的SSO身份验证流程.我已经将Spring Social配置为通过/ auth/[provider]通过外部提供程序进行身份验证; 但是,以下请求不再正确设置SecurityContext.可能是Spring Security OAuth服务器或客户端覆盖了SecurityContext?
如果我可以在Spring Social流程之后正确设置SecurityContext,我有一个新的TokenGranter,允许新的授权类型"social",它将检查SecurityContextHolder以获得预先认证的用户.
我对SecurityContext的特定问题的解决方案感兴趣(我认为这是Spring OAuth +社交集成的问题),或者是与外部提供程序进行身份验证以及从我们自己的auth服务器获取有效JWT的不同方法.
谢谢!
spring-security single-sign-on spring-social 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