如何使用提供的客户端ID和客户端密钥提供对受保护端点的访问?

时间:2014-11-10 08:48:52

标签: java spring oauth spring-security spring-security-oauth2

我有一个OAuth应用程序。 身份验证包含两个步骤:获取访问令牌,使用提供的访问令牌发出请求。

是否可以将Spring安全性配置为提供客户端ID和客户端机密作为https://localhost.com/api/endpoint?client_id=xxxx&client_secret=yyyy等请求参数的访问权限?

1 个答案:

答案 0 :(得分:0)

答案很简单:

@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
    endpoints
            .tokenGranter(new CompositeTokenGranter(
                            Arrays.asList(resourceOwnerPasswordTokenGranter(), clientCredentialsTokenGranter())))
            .authenticationManager(providerManager())
            .clientDetailsService(clientDetailsService())
            .tokenServices(defaultTokenServices());
}

private TokenGranter resourceOwnerPasswordTokenGranter() {
    return new ResourceOwnerPasswordTokenGranter(
            new ProviderManager(Arrays.asList(authenticationProvider())),
            defaultTokenServices(),
            clientDetailsService(),
            defaultOAuth2RequestFactory());
}

private TokenGranter clientCredentialsTokenGranter() {
     return new ClientCredentialsTokenGranter(
             defaultTokenServices(),
             clientDetailsService(),
             defaultOAuth2RequestFactory());
}

我添加了新的CompositeTokenGranter,其中列出了2个格式:ResourceOwnerPassswordTokenGranter(用于clientId + clientPassword +用户名+密码验证)和ClientCredentialsTokenGranter(用于clientId + clientPassword验证)。

修改

看起来我的问题不正确。为此表示歉意。我对授权服务器进行了更改。所以它只适用于/ oauth / token。 如何修复问题我现在还不知道,但是当找到解决方案时我会更新这个问题。