use of io.micronaut.security.oauth2.endpoint.token.response.TokenResponse in project micronaut-security by micronaut-projects.
the class ClientCredentialsHttpClientFilter method doFilter.
@Override
public Publisher<? extends HttpResponse<?>> doFilter(MutableHttpRequest<?> request, ClientFilterChain chain) {
Optional<OauthClientConfiguration> oauthClientOptional = getClientConfiguration(request);
if (!oauthClientOptional.isPresent()) {
if (LOG.isTraceEnabled()) {
LOG.trace("Did not find any OAuth 2.0 client which should decorate the request with an access token received from client credentials request");
}
return chain.proceed(request);
}
OauthClientConfiguration oauthClient = oauthClientOptional.get();
Optional<ClientCredentialsClient> clientCredentialsClientOptional = getClient(oauthClient);
if (!clientCredentialsClientOptional.isPresent()) {
if (LOG.isTraceEnabled()) {
LOG.trace("Could not retrieve client credentials client for OAuth 2.0 client {}", oauthClient.getName());
}
return chain.proceed(request);
}
ClientCredentialsTokenPropagator tokenHandler = getTokenHandler(oauthClient);
return Flux.from(clientCredentialsClientOptional.get().requestToken(getScope(oauthClient))).map(TokenResponse::getAccessToken).switchMap(accessToken -> {
if (StringUtils.isNotEmpty(accessToken)) {
tokenHandler.writeToken(request, accessToken);
}
return chain.proceed(request);
});
}
use of io.micronaut.security.oauth2.endpoint.token.response.TokenResponse in project micronaut-security by micronaut-projects.
the class DefaultTokenEndpointClient method secureRequest.
/**
* Secures the request according to the context's endpoint supported authentication
* methods.
*
* @param request Token endpoint Request
* @param requestContext The request context
* @param <G> The token request grant or body
* @param <R> The token response type
*/
protected <G, R extends TokenResponse> void secureRequest(@NonNull MutableHttpRequest<G> request, TokenRequestContext<G, R> requestContext) {
List<AuthenticationMethod> authMethodsSupported = requestContext.getEndpoint().getSupportedAuthenticationMethods().orElseGet(() -> Collections.singletonList(AuthenticationMethod.CLIENT_SECRET_BASIC));
OauthClientConfiguration clientConfiguration = requestContext.getClientConfiguration();
if (LOG.isTraceEnabled()) {
LOG.trace("The token endpoint supports [{}] authentication methods", authMethodsSupported);
}
if (authMethodsSupported.contains(AuthenticationMethod.CLIENT_SECRET_BASIC)) {
if (LOG.isTraceEnabled()) {
LOG.trace("Using client_secret_basic authentication. Adding an Authorization header");
}
request.basicAuth(clientConfiguration.getClientId(), clientConfiguration.getClientSecret());
} else if (authMethodsSupported.contains(AuthenticationMethod.CLIENT_SECRET_POST)) {
if (LOG.isTraceEnabled()) {
LOG.trace("Using client_secret_post authentication. The client_id and client_secret will be present in the body");
}
request.getBody().filter(SecureGrant.class::isInstance).map(SecureGrant.class::cast).ifPresent(body -> {
body.setClientId(clientConfiguration.getClientId());
body.setClientSecret(clientConfiguration.getClientSecret());
});
} else {
if (LOG.isTraceEnabled()) {
LOG.trace("Unsupported or no authentication method. The client_id will be present in the body");
}
request.getBody().filter(SecureGrant.class::isInstance).map(SecureGrant.class::cast).ifPresent(body -> body.setClientId(clientConfiguration.getClientId()));
}
}
Aggregations