使用REST请求进行Spring OAuth2身份验证

时间:2016-01-12 11:18:24

标签: java spring-security spring-oauth2

背景

我关注了this tutorial,以便使用spring-security-oauth2配置OAuth2服务器。

到目前为止,它的工作原理如下:

  • 当用户尝试连接服务器时,会显示一个普通的身份验证对话框
  • 如果提供了正确的凭据,则会将用户重定向到默认的Spring确认表单。
  • 如果用户选择“允许”,则用户可以使用可用于获取访问令牌的授权码重定向到我想要的任何页面。

SSCCE

我放置了这个准备好运行的示例on my github account(或多或少是本教程给出的代码)

克隆:

git clone https://github.com/ArnaudDenoyelle/sscce-spring-oauth2.git

执行:

mvn spring-boot:run

然后导航至:

http://localhost:9999/uaa/oauth/authorize?response_type=code&client_id=acme&redirect_uri=http://example.com

使用以下身份进行身份验证:

-user : user
-password : password

问题

现在,我想改变行为:

  • 我更喜欢登录/密码表单,而不是普通的旧身份验证对话框。
  • 我不想要第二步要求用户授权:我只想获得一个访问令牌。

到目前为止,我可以通过以下步骤完成:

  • 用户以自定义表单输入其凭据。
  • 我向http://localhost:9999/uaa/oauth/authorize?response_type=code&client_id=acme&redirect_uri=http://example.com
  • 发送GET请求
  • 我收到 HTML回复(这是确认表单),但如果它是HTTP 200,它并不关心它。它还为我提供了一些必要的cookie。下一步。
  • 我向http://localhost:9999/uaa/oauth/authorize发送一个POST请求,其中包含默认spring确认表发送的相同正文参数:
    • user_oauth_approval = true
    • scope.openid = true

可行:用户被重定向到我想要的页面(在这种情况下:http://example.com?code= $ authorization_code $)

问题

我想要的只是摆脱Spring的确认表。在我的情况下它没用:我只想获得当前会话的访问令牌,而不是永久授权客户端访问私有资源。有配置吗?

相关代码是:

@SpringBootApplication
public class AuthserverApplication extends WebMvcConfigurerAdapter {

    public static void main(String[] args) {
        SpringApplication.run(AuthserverApplication.class, args);
    }

    @Configuration
    @EnableAuthorizationServer
    protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter {

        @Autowired
        private AuthenticationManager authenticationManager;

        @Override
        public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
            endpoints.authenticationManager(authenticationManager);
        }

        @Override
        public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
            clients.inMemory()
                    .withClient("acme")
                    .secret("acmesecret")
                    .authorizedGrantTypes("authorization_code", "refresh_token", "password").scopes("openid");
        }

    }
}

0 个答案:

没有答案