Class OAuth2ClientCredentialsGrantCredentialsProvider
- java.lang.Object
-
- com.rabbitmq.client.impl.RefreshProtectedCredentialsProvider<OAuth2ClientCredentialsGrantCredentialsProvider.Token>
-
- com.rabbitmq.client.impl.OAuth2ClientCredentialsGrantCredentialsProvider
-
- All Implemented Interfaces:
CredentialsProvider
public class OAuth2ClientCredentialsGrantCredentialsProvider extends RefreshProtectedCredentialsProvider<OAuth2ClientCredentialsGrantCredentialsProvider.Token>
ACredentialsProvider
that performs an OAuth 2 Client Credentials flow to retrieve a token.The provider has different parameters to set, e.g. the token endpoint URI of the OAuth server to request, the client ID, the client secret, the grant type, etc. The
OAuth2ClientCredentialsGrantCredentialsProvider.OAuth2ClientCredentialsGrantCredentialsProviderBuilder
class is the preferred way to create an instance of the provider.The implementation uses the JDK
HttpURLConnection
API to request the OAuth server. This can be easily changed by overriding theretrieveToken()
method.This class expects a JSON document as a response and needs Jackson to deserialize the response into a
OAuth2ClientCredentialsGrantCredentialsProvider.Token
. This can be changed by overriding theparseToken(String)
method.TLS is supported by providing a
HTTPS
URI and setting aSSLContext
. SeeOAuth2ClientCredentialsGrantCredentialsProvider.OAuth2ClientCredentialsGrantCredentialsProviderBuilder.tls()
for more information. Applications in production should always use HTTPS to retrieve tokens.If more customization is needed, a
connectionConfigurator
callback can be provided to configure the connection.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
OAuth2ClientCredentialsGrantCredentialsProvider.JacksonTokenLookup
static class
OAuth2ClientCredentialsGrantCredentialsProvider.OAuth2ClientCredentialsGrantCredentialsProviderBuilder
Helper to createOAuth2ClientCredentialsGrantCredentialsProvider
instances.static class
OAuth2ClientCredentialsGrantCredentialsProvider.TlsConfiguration
TLS configuration for aOAuth2ClientCredentialsGrantCredentialsProvider
.static class
OAuth2ClientCredentialsGrantCredentialsProvider.Token
-
Field Summary
Fields Modifier and Type Field Description private java.lang.String
clientId
private java.lang.String
clientSecret
private java.util.function.Consumer<java.net.HttpURLConnection>
connectionConfigurator
private java.lang.String
grantType
private javax.net.ssl.HostnameVerifier
hostnameVerifier
private java.lang.String
id
private java.util.Map<java.lang.String,java.lang.String>
parameters
private javax.net.ssl.SSLSocketFactory
sslSocketFactory
private java.lang.String
tokenEndpointUri
private java.util.concurrent.atomic.AtomicReference<java.util.function.Function<java.lang.String,OAuth2ClientCredentialsGrantCredentialsProvider.Token>>
tokenExtractor
private static java.lang.String
UTF_8_CHARSET
-
Constructor Summary
Constructors Constructor Description OAuth2ClientCredentialsGrantCredentialsProvider(java.lang.String tokenEndpointUri, java.lang.String clientId, java.lang.String clientSecret, java.lang.String grantType)
UseOAuth2ClientCredentialsGrantCredentialsProvider.OAuth2ClientCredentialsGrantCredentialsProviderBuilder
to create an instance.OAuth2ClientCredentialsGrantCredentialsProvider(java.lang.String tokenEndpointUri, java.lang.String clientId, java.lang.String clientSecret, java.lang.String grantType, java.util.Map<java.lang.String,java.lang.String> parameters)
UseOAuth2ClientCredentialsGrantCredentialsProvider.OAuth2ClientCredentialsGrantCredentialsProviderBuilder
to create an instance.OAuth2ClientCredentialsGrantCredentialsProvider(java.lang.String tokenEndpointUri, java.lang.String clientId, java.lang.String clientSecret, java.lang.String grantType, java.util.Map<java.lang.String,java.lang.String> parameters, java.util.function.Consumer<java.net.HttpURLConnection> connectionConfigurator)
UseOAuth2ClientCredentialsGrantCredentialsProvider.OAuth2ClientCredentialsGrantCredentialsProviderBuilder
to create an instance.OAuth2ClientCredentialsGrantCredentialsProvider(java.lang.String tokenEndpointUri, java.lang.String clientId, java.lang.String clientSecret, java.lang.String grantType, java.util.Map<java.lang.String,java.lang.String> parameters, javax.net.ssl.HostnameVerifier hostnameVerifier, javax.net.ssl.SSLSocketFactory sslSocketFactory)
UseOAuth2ClientCredentialsGrantCredentialsProvider.OAuth2ClientCredentialsGrantCredentialsProviderBuilder
to create an instance.OAuth2ClientCredentialsGrantCredentialsProvider(java.lang.String tokenEndpointUri, java.lang.String clientId, java.lang.String clientSecret, java.lang.String grantType, java.util.Map<java.lang.String,java.lang.String> parameters, javax.net.ssl.HostnameVerifier hostnameVerifier, javax.net.ssl.SSLSocketFactory sslSocketFactory, java.util.function.Consumer<java.net.HttpURLConnection> connectionConfigurator)
UseOAuth2ClientCredentialsGrantCredentialsProvider.OAuth2ClientCredentialsGrantCredentialsProviderBuilder
to create an instance.OAuth2ClientCredentialsGrantCredentialsProvider(java.lang.String tokenEndpointUri, java.lang.String clientId, java.lang.String clientSecret, java.lang.String grantType, javax.net.ssl.HostnameVerifier hostnameVerifier, javax.net.ssl.SSLSocketFactory sslSocketFactory)
UseOAuth2ClientCredentialsGrantCredentialsProvider.OAuth2ClientCredentialsGrantCredentialsProviderBuilder
to create an instance.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static java.lang.String
basicAuthentication(java.lang.String username, java.lang.String password)
protected void
checkContentType(java.lang.String headerField)
protected void
checkResponseCode(int responseCode)
protected void
configureConnection(java.net.HttpURLConnection connection)
protected void
configureConnectionForHttps(java.net.HttpURLConnection connection)
private static java.lang.StringBuilder
encode(java.lang.StringBuilder builder, java.lang.String name, java.lang.String value)
private static java.lang.String
encode(java.lang.String value, java.lang.String charset)
boolean
equals(java.lang.Object o)
protected java.lang.String
extractResponseBody(java.io.InputStream inputStream)
java.lang.String
getUsername()
Username to use for authenticationint
hashCode()
protected OAuth2ClientCredentialsGrantCredentialsProvider.Token
parseToken(java.lang.String response)
protected java.lang.String
passwordFromToken(OAuth2ClientCredentialsGrantCredentialsProvider.Token token)
protected OAuth2ClientCredentialsGrantCredentialsProvider.Token
retrieveToken()
protected java.time.Duration
timeBeforeExpiration(OAuth2ClientCredentialsGrantCredentialsProvider.Token token)
protected java.lang.String
usernameFromToken(OAuth2ClientCredentialsGrantCredentialsProvider.Token token)
-
Methods inherited from class com.rabbitmq.client.impl.RefreshProtectedCredentialsProvider
getPassword, getTimeBeforeExpiration, refresh
-
-
-
-
Field Detail
-
UTF_8_CHARSET
private static final java.lang.String UTF_8_CHARSET
- See Also:
- Constant Field Values
-
tokenEndpointUri
private final java.lang.String tokenEndpointUri
-
clientId
private final java.lang.String clientId
-
clientSecret
private final java.lang.String clientSecret
-
grantType
private final java.lang.String grantType
-
parameters
private final java.util.Map<java.lang.String,java.lang.String> parameters
-
tokenExtractor
private final java.util.concurrent.atomic.AtomicReference<java.util.function.Function<java.lang.String,OAuth2ClientCredentialsGrantCredentialsProvider.Token>> tokenExtractor
-
id
private final java.lang.String id
-
hostnameVerifier
private final javax.net.ssl.HostnameVerifier hostnameVerifier
-
sslSocketFactory
private final javax.net.ssl.SSLSocketFactory sslSocketFactory
-
connectionConfigurator
private final java.util.function.Consumer<java.net.HttpURLConnection> connectionConfigurator
-
-
Constructor Detail
-
OAuth2ClientCredentialsGrantCredentialsProvider
public OAuth2ClientCredentialsGrantCredentialsProvider(java.lang.String tokenEndpointUri, java.lang.String clientId, java.lang.String clientSecret, java.lang.String grantType)
UseOAuth2ClientCredentialsGrantCredentialsProvider.OAuth2ClientCredentialsGrantCredentialsProviderBuilder
to create an instance.- Parameters:
tokenEndpointUri
-clientId
-clientSecret
-grantType
-
-
OAuth2ClientCredentialsGrantCredentialsProvider
public OAuth2ClientCredentialsGrantCredentialsProvider(java.lang.String tokenEndpointUri, java.lang.String clientId, java.lang.String clientSecret, java.lang.String grantType, java.util.Map<java.lang.String,java.lang.String> parameters)
UseOAuth2ClientCredentialsGrantCredentialsProvider.OAuth2ClientCredentialsGrantCredentialsProviderBuilder
to create an instance.- Parameters:
tokenEndpointUri
-clientId
-clientSecret
-grantType
-parameters
-
-
OAuth2ClientCredentialsGrantCredentialsProvider
public OAuth2ClientCredentialsGrantCredentialsProvider(java.lang.String tokenEndpointUri, java.lang.String clientId, java.lang.String clientSecret, java.lang.String grantType, java.util.Map<java.lang.String,java.lang.String> parameters, java.util.function.Consumer<java.net.HttpURLConnection> connectionConfigurator)
UseOAuth2ClientCredentialsGrantCredentialsProvider.OAuth2ClientCredentialsGrantCredentialsProviderBuilder
to create an instance.- Parameters:
tokenEndpointUri
-clientId
-clientSecret
-grantType
-parameters
-connectionConfigurator
-
-
OAuth2ClientCredentialsGrantCredentialsProvider
public OAuth2ClientCredentialsGrantCredentialsProvider(java.lang.String tokenEndpointUri, java.lang.String clientId, java.lang.String clientSecret, java.lang.String grantType, javax.net.ssl.HostnameVerifier hostnameVerifier, javax.net.ssl.SSLSocketFactory sslSocketFactory)
UseOAuth2ClientCredentialsGrantCredentialsProvider.OAuth2ClientCredentialsGrantCredentialsProviderBuilder
to create an instance.- Parameters:
tokenEndpointUri
-clientId
-clientSecret
-grantType
-hostnameVerifier
-sslSocketFactory
-
-
OAuth2ClientCredentialsGrantCredentialsProvider
public OAuth2ClientCredentialsGrantCredentialsProvider(java.lang.String tokenEndpointUri, java.lang.String clientId, java.lang.String clientSecret, java.lang.String grantType, java.util.Map<java.lang.String,java.lang.String> parameters, javax.net.ssl.HostnameVerifier hostnameVerifier, javax.net.ssl.SSLSocketFactory sslSocketFactory)
UseOAuth2ClientCredentialsGrantCredentialsProvider.OAuth2ClientCredentialsGrantCredentialsProviderBuilder
to create an instance.- Parameters:
tokenEndpointUri
-clientId
-clientSecret
-grantType
-parameters
-hostnameVerifier
-sslSocketFactory
-
-
OAuth2ClientCredentialsGrantCredentialsProvider
public OAuth2ClientCredentialsGrantCredentialsProvider(java.lang.String tokenEndpointUri, java.lang.String clientId, java.lang.String clientSecret, java.lang.String grantType, java.util.Map<java.lang.String,java.lang.String> parameters, javax.net.ssl.HostnameVerifier hostnameVerifier, javax.net.ssl.SSLSocketFactory sslSocketFactory, java.util.function.Consumer<java.net.HttpURLConnection> connectionConfigurator)
UseOAuth2ClientCredentialsGrantCredentialsProvider.OAuth2ClientCredentialsGrantCredentialsProviderBuilder
to create an instance.- Parameters:
tokenEndpointUri
-clientId
-clientSecret
-grantType
-parameters
-hostnameVerifier
-sslSocketFactory
-connectionConfigurator
-
-
-
Method Detail
-
encode
private static java.lang.StringBuilder encode(java.lang.StringBuilder builder, java.lang.String name, java.lang.String value) throws java.io.UnsupportedEncodingException
- Throws:
java.io.UnsupportedEncodingException
-
encode
private static java.lang.String encode(java.lang.String value, java.lang.String charset) throws java.io.UnsupportedEncodingException
- Throws:
java.io.UnsupportedEncodingException
-
basicAuthentication
private static java.lang.String basicAuthentication(java.lang.String username, java.lang.String password)
-
getUsername
public java.lang.String getUsername()
Description copied from interface:CredentialsProvider
Username to use for authentication- Specified by:
getUsername
in interfaceCredentialsProvider
- Overrides:
getUsername
in classRefreshProtectedCredentialsProvider<OAuth2ClientCredentialsGrantCredentialsProvider.Token>
- Returns:
- username
-
usernameFromToken
protected java.lang.String usernameFromToken(OAuth2ClientCredentialsGrantCredentialsProvider.Token token)
-
parseToken
protected OAuth2ClientCredentialsGrantCredentialsProvider.Token parseToken(java.lang.String response)
-
retrieveToken
protected OAuth2ClientCredentialsGrantCredentialsProvider.Token retrieveToken()
- Specified by:
retrieveToken
in classRefreshProtectedCredentialsProvider<OAuth2ClientCredentialsGrantCredentialsProvider.Token>
-
checkContentType
protected void checkContentType(java.lang.String headerField) throws OAuthTokenManagementException
- Throws:
OAuthTokenManagementException
-
checkResponseCode
protected void checkResponseCode(int responseCode) throws OAuthTokenManagementException
- Throws:
OAuthTokenManagementException
-
extractResponseBody
protected java.lang.String extractResponseBody(java.io.InputStream inputStream) throws java.io.IOException
- Throws:
java.io.IOException
-
passwordFromToken
protected java.lang.String passwordFromToken(OAuth2ClientCredentialsGrantCredentialsProvider.Token token)
-
timeBeforeExpiration
protected java.time.Duration timeBeforeExpiration(OAuth2ClientCredentialsGrantCredentialsProvider.Token token)
-
configureConnection
protected void configureConnection(java.net.HttpURLConnection connection)
-
configureConnectionForHttps
protected void configureConnectionForHttps(java.net.HttpURLConnection connection)
-
equals
public boolean equals(java.lang.Object o)
- Overrides:
equals
in classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
-