Как да осигуря достъп до защитена крайна точка с предоставен клиентски идентификатор и клиентска тайна?

Имам приложение с OAuth. Удостоверяването съдържа 2 стъпки: получаване на токен за достъп, направете заявка с предоставен токен за достъп.

Възможно ли е да се конфигурира пролетна защита за предоставяне на достъп чрез предоставен клиентски идентификатор и клиентска тайна като параметри на заявка като https://localhost.com/api/endpoint?client_id=xxxx&client_secret=yyyy?


person Alex    schedule 10.11.2014    source източник
comment
Не е ли предложената от вас схема само HTTP Basic удостоверяване? Защо изобщо да използвате 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 със списък от 2 предоставящи лица: ResourceOwnerPassswordTokenGranter (за удостоверяване чрез clientId+clientPassword+потребителско име+парола) и ClientCredentialsTokenGranter (за удостоверяване чрез clientId+clientPassword).

РЕДАКТИРАНЕ

Изглежда, че въпросът ми е неправилен. Съжалявам за това. Направих тези промени за сървъра за оторизация. Така че работи само за /oauth/токен. Как да коригирам проблема с въпроса Засега нямам идея, но ще актуализирам този въпрос, когато намеря решение.

person Alex    schedule 11.11.2014
comment
Трябва да е бил различен въпрос от този, който прочетох. Щастлив съм обаче, че сте доволни (тъй като предоставящият токени по подразбиране вече има тези 2 опции). - person Dave Syer; 12.11.2014