如果用户之前已经授权访问,如何绕过Spring安全OAuth2中的访问确认步骤? [英] How to bypass access confirmation step in Spring security OAuth2 if user has previously authorized access?
本文介绍了如果用户之前已经授权访问,如何绕过Spring安全OAuth2中的访问确认步骤?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我当前正在尝试绕过Spring Security OAuth2中访问授权流程的批准/拒绝步骤,因为应该记录先前授权的访问(针对特定的客户端id和用户id),并允许将OAuth-app重定向到客户端应用程序,而无需每次都询问用户是否批准。
<version.spring-security>3.2.0.RELEASE</version.spring-security>
<version.spring-security-oauth>1.0.5.RELEASE</version.spring-security-oauth>
因此我有一个AccessConformationController,它具有/OAuth/Confirm_Access终结点的映射:
@RequestMapping("/oauth/confirm_access")
public ModelAndView getAccessConfirmation(@ModelAttribute final AuthorizationRequest clientAuth)
{
final ClientDetails client = this.clientDetailsService.loadClientByClientId(clientAuth.getClientId());
final TreeMap<String, Object> model = Maps.newTreeMap();
model.put("auth_request", clientAuth);
model.put("client", client);
return new ModelAndView("access_confirmation", model);
}
非常经典的访问确认处理方式。
现在我知道我必须检查(在此方法中的某个地方)当前经过身份验证的用户(主体)以前是否批准了访问,如果是,我们应该只检索与用户关联的令牌,并可能只通过reDirect_uri向他发送令牌。
Spring Security中有一个允许令牌检索的内部终结点:
@FrameworkEndpoint
@RequestMapping(value = "/oauth/token")
public class TokenEndpoint extends AbstractEndpoint {
@RequestMapping
public ResponseEntity<OAuth2AccessToken> getAccessToken(Principal principal,
@RequestParam(value = "grant_type", required = false) String grantType,
@RequestParam Map<String, String> parameters) {
// the logic here
}
}
如何从我的控制器中调用此框架终结点?这是最好的方法吗(~最佳实践?)做这件事?
提前谢谢,
推荐答案
您只需在配置中设置AutoAprove=True
@Configuration
@EnableAuthorizationServer
public class OAuth2Config extends AuthorizationServerConfigurerAdapter {
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory()
.withClient("my-client")
.secret("secret")
.authorizedGrantTypes("authorization_code")
.autoApprove(true)
.scopes("scope");
}
}
这篇关于如果用户之前已经授权访问,如何绕过Spring安全OAuth2中的访问确认步骤?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文