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>
ACredentialsProviderthat 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.OAuth2ClientCredentialsGrantCredentialsProviderBuilderclass is the preferred way to create an instance of the provider.The implementation uses the JDK
HttpURLConnectionAPI 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
HTTPSURI 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
connectionConfiguratorcallback can be provided to configure the connection.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classOAuth2ClientCredentialsGrantCredentialsProvider.JacksonTokenLookupstatic classOAuth2ClientCredentialsGrantCredentialsProvider.OAuth2ClientCredentialsGrantCredentialsProviderBuilderHelper to createOAuth2ClientCredentialsGrantCredentialsProviderinstances.static classOAuth2ClientCredentialsGrantCredentialsProvider.TlsConfigurationTLS configuration for aOAuth2ClientCredentialsGrantCredentialsProvider.static classOAuth2ClientCredentialsGrantCredentialsProvider.Token
-
Field Summary
Fields Modifier and Type Field Description private java.lang.StringclientIdprivate java.lang.StringclientSecretprivate java.util.function.Consumer<java.net.HttpURLConnection>connectionConfiguratorprivate java.lang.StringgrantTypeprivate javax.net.ssl.HostnameVerifierhostnameVerifierprivate java.lang.Stringidprivate java.util.Map<java.lang.String,java.lang.String>parametersprivate javax.net.ssl.SSLSocketFactorysslSocketFactoryprivate java.lang.StringtokenEndpointUriprivate java.util.concurrent.atomic.AtomicReference<java.util.function.Function<java.lang.String,OAuth2ClientCredentialsGrantCredentialsProvider.Token>>tokenExtractorprivate static java.lang.StringUTF_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.OAuth2ClientCredentialsGrantCredentialsProviderBuilderto 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.OAuth2ClientCredentialsGrantCredentialsProviderBuilderto 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.OAuth2ClientCredentialsGrantCredentialsProviderBuilderto 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.OAuth2ClientCredentialsGrantCredentialsProviderBuilderto 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.OAuth2ClientCredentialsGrantCredentialsProviderBuilderto 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.OAuth2ClientCredentialsGrantCredentialsProviderBuilderto create an instance.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static java.lang.StringbasicAuthentication(java.lang.String username, java.lang.String password)protected voidcheckContentType(java.lang.String headerField)protected voidcheckResponseCode(int responseCode)protected voidconfigureConnection(java.net.HttpURLConnection connection)protected voidconfigureConnectionForHttps(java.net.HttpURLConnection connection)private static java.lang.StringBuilderencode(java.lang.StringBuilder builder, java.lang.String name, java.lang.String value)private static java.lang.Stringencode(java.lang.String value, java.lang.String charset)booleanequals(java.lang.Object o)protected java.lang.StringextractResponseBody(java.io.InputStream inputStream)java.lang.StringgetUsername()Username to use for authenticationinthashCode()protected OAuth2ClientCredentialsGrantCredentialsProvider.TokenparseToken(java.lang.String response)protected java.lang.StringpasswordFromToken(OAuth2ClientCredentialsGrantCredentialsProvider.Token token)protected OAuth2ClientCredentialsGrantCredentialsProvider.TokenretrieveToken()protected java.time.DurationtimeBeforeExpiration(OAuth2ClientCredentialsGrantCredentialsProvider.Token token)protected java.lang.StringusernameFromToken(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.OAuth2ClientCredentialsGrantCredentialsProviderBuilderto 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.OAuth2ClientCredentialsGrantCredentialsProviderBuilderto 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.OAuth2ClientCredentialsGrantCredentialsProviderBuilderto 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.OAuth2ClientCredentialsGrantCredentialsProviderBuilderto 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.OAuth2ClientCredentialsGrantCredentialsProviderBuilderto 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.OAuth2ClientCredentialsGrantCredentialsProviderBuilderto 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:CredentialsProviderUsername to use for authentication- Specified by:
getUsernamein interfaceCredentialsProvider- Overrides:
getUsernamein 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:
retrieveTokenin 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:
equalsin classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCodein classjava.lang.Object
-
-