Spring 安全 OAuth2 accessToken
Spring Security OAuth2 accessToken
在我的 Spring 引导应用程序中,我需要以编程方式创建一个新用户并从内部(此应用程序的一部分)OAuth2 授权服务器为他获取 OAuth2 access/refresh 令牌。
然后,我计划将这些 access/refresh tokens
发送到某个外部(客户端)应用程序,该应用程序将代表该用户与我的第一个应用程序进行交互。
是否可以在不提供密码的情况下以编程方式为该用户获取 OAuth2 access/refresh 令牌(在以编程方式创建该用户期间,我不想处理 password
,仅 username
).
可以,请看下面的代码
@Autowired
private TokenEndpoint tokenEndpoint;
public ResponseEntity<?> createToken(User user) {
Principal principal = new UsernamePasswordAuthenticationToken(user.getUserName(), user.getPassword(), user.getAuthorities());
HashMap<String, String> parameters = new HashMap<String, String>();
parameters.put("client_id", "XXX");
parameters.put("client_secret", "XXX");
parameters.put("grant_type", "password");
parameters.put("password", user.getPassword());
parameters.put("scope", "XXX");
parameters.put("username", user.getUserName());
return tokenEndpoint.getAccessToken(principal, parameters);
}
但您违反了 OAuth2 规范。授权应由资源所有者执行。
在我的 Spring 引导应用程序中,我需要以编程方式创建一个新用户并从内部(此应用程序的一部分)OAuth2 授权服务器为他获取 OAuth2 access/refresh 令牌。
然后,我计划将这些 access/refresh tokens
发送到某个外部(客户端)应用程序,该应用程序将代表该用户与我的第一个应用程序进行交互。
是否可以在不提供密码的情况下以编程方式为该用户获取 OAuth2 access/refresh 令牌(在以编程方式创建该用户期间,我不想处理 password
,仅 username
).
可以,请看下面的代码
@Autowired
private TokenEndpoint tokenEndpoint;
public ResponseEntity<?> createToken(User user) {
Principal principal = new UsernamePasswordAuthenticationToken(user.getUserName(), user.getPassword(), user.getAuthorities());
HashMap<String, String> parameters = new HashMap<String, String>();
parameters.put("client_id", "XXX");
parameters.put("client_secret", "XXX");
parameters.put("grant_type", "password");
parameters.put("password", user.getPassword());
parameters.put("scope", "XXX");
parameters.put("username", user.getUserName());
return tokenEndpoint.getAccessToken(principal, parameters);
}
但您违反了 OAuth2 规范。授权应由资源所有者执行。