Как предоставить доступ к защищенной конечной точке с предоставленным идентификатором клиента и секретом клиента?

У меня есть приложение с OAuth. Аутентификация состоит из 2 шагов: получить токен доступа, сделать запрос с предоставленным токеном доступа.

Можно ли настроить безопасность Spring для предоставления доступа по предоставленному идентификатору клиента и секрету клиента в качестве параметров запроса, таких как https://localhost.com/api/endpoint?client_id=xxxx&client_secret=yyyy?


person Alex    schedule 10.11.2014    source источник
comment
Разве предложенная вами схема не просто HTTP-аутентификация? Зачем вообще использовать OAuth?   -  person GaryF    schedule 11.11.2014
comment
Это не совсем HTTP Basic, но это не та схема, которую кто-либо рекомендовал бы на практике (учетные данные в URL-адресе). HTTP Basic было бы лучше.   -  person Dave Syer    schedule 11.11.2014
comment
В github есть такая же опция developer.github.com/v3/#oauth2-keysecret. для межсерверного соединения   -  person Alex    schedule 11.11.2014


Ответы (1)


Ответ как всегда прост:

@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 со списком из двух грантеров: ResourceOwnerPassswordTokenGranter (для аутентификации по clientId + clientPassword + имя пользователя + пароль) и ClientCredentialsTokenGranter (для аутентификации по clientId + clientPassword).

ИЗМЕНИТЬ

Похоже, мой вопрос был неправильным. Извини за это. Я внес эти изменения для сервера авторизации. Так что он работает только для / oauth / token. Как решить проблему с вопросом, я пока не знаю, но обновлю этот вопрос, когда найду решение.

person Alex    schedule 11.11.2014
comment
Должно быть, это был другой вопрос, чем тот, который я читал. Я счастлив, что вы довольны (так как у поставщика токенов по умолчанию уже есть эти 2 варианта). - person Dave Syer; 12.11.2014