/*
 * Copyright (c) 2011-2014 The original author or authors
 * ------------------------------------------------------
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * and Apache License v2.0 which accompanies this distribution.
 *
 *     The Eclipse Public License is available at
 *     http://www.eclipse.org/legal/epl-v10.html
 *
 *     The Apache License v2.0 is available at
 *     http://www.opensource.org/licenses/apache2.0.php
 *
 * You may elect to redistribute this code under either of these licenses.
 */

package io.vertx.ext.auth.oauth2;

import io.vertx.codegen.annotations.DataObject;
import io.vertx.core.http.HttpClient;
import io.vertx.core.http.HttpClientOptions;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.auth.PubSecKeyOptions;
import io.vertx.ext.jwt.JWTOptions;

import java.util.ArrayList;
import java.util.List;

Options describing how an OAuth2 HttpClient will make connections.
Author:Paulo Lopes
/** * Options describing how an OAuth2 {@link HttpClient} will make connections. * * @author <a href="mailto:plopes@redhat.com">Paulo Lopes</a> */
@DataObject(generateConverter = true) public class OAuth2ClientOptions extends HttpClientOptions { // Defaults private static final OAuth2FlowType FLOW = OAuth2FlowType.AUTH_CODE; private static final String AUTHORIZATION_PATH = "/oauth/authorize"; private static final String TOKEN_PATH = "/oauth/token"; private static final String REVOKATION_PATH = "/oauth/revoke"; private static final boolean USE_BASIC_AUTHORIZATION_HEADER = true; private static final String CLIENT_SECRET_PARAMETER_NAME = "client_secret"; private static final JWTOptions JWT_OPTIONS = new JWTOptions(); private static final String SCOPE_SEPARATOR = " "; private static final boolean VALIDATE_ISSUER = true; private OAuth2FlowType flow; private String authorizationPath; private String tokenPath; private String revocationPath; private String scopeSeparator; // this is an openid-connect extension private boolean validateIssuer; private String logoutPath; private boolean useBasicAuthorizationHeader; private String clientSecretParameterName; private String userInfoPath; // extra parameters to be added while requesting the user info private JsonObject userInfoParams; // introspection RFC7662 private String introspectionPath; // JWK path RFC7517 private String jwkPath; private String site; private String clientID; private String clientSecret; private String userAgent; private JsonObject headers; private List<PubSecKeyOptions> pubSecKeys; private JWTOptions jwtOptions; // extra parameters to be added while requesting a token private JsonObject extraParams; public String getSite() { return site; }
Default constructor
/** * Default constructor */
public OAuth2ClientOptions() { super(); init(); }
Copy constructor
Params:
  • other – the options to copy
/** * Copy constructor * * @param other the options to copy */
public OAuth2ClientOptions(HttpClientOptions other) { super(other); init(); }
Copy constructor
Params:
  • other – the options to copy
/** * Copy constructor * * @param other the options to copy */
public OAuth2ClientOptions(OAuth2ClientOptions other) { super(other); // defaults validateIssuer = other.isValidateIssuer(); flow = other.getFlow(); authorizationPath = other.getAuthorizationPath(); tokenPath = other.getTokenPath(); revocationPath = other.getRevocationPath(); userInfoPath = other.getUserInfoPath(); introspectionPath = other.getIntrospectionPath(); scopeSeparator = other.getScopeSeparator(); useBasicAuthorizationHeader = other.isUseBasicAuthorizationHeader(); clientSecretParameterName = other.getClientSecretParameterName(); // specialization site = other.getSite(); clientID = other.getClientID(); clientSecret = other.getClientSecret(); pubSecKeys = other.getPubSecKeys(); // jwt options jwtOptions = other.getJWTOptions(); logoutPath = other.getLogoutPath(); // extras final JsonObject obj = other.getExtraParameters(); if (obj != null) { extraParams = obj.copy(); } else { extraParams = null; } // user info params final JsonObject obj2 = other.getUserInfoParameters(); if (obj2 != null) { userInfoParams = obj2.copy(); } else { userInfoParams = null; } // custom headers final JsonObject obj3 = other.getHeaders(); if (obj3 != null) { headers = obj3.copy(); } else { headers = null; } // JWK path RFC7517 jwkPath = other.getJwkPath(); } private void init() { flow = FLOW; validateIssuer = VALIDATE_ISSUER; authorizationPath = AUTHORIZATION_PATH; tokenPath = TOKEN_PATH; revocationPath = REVOKATION_PATH; scopeSeparator = SCOPE_SEPARATOR; useBasicAuthorizationHeader = USE_BASIC_AUTHORIZATION_HEADER; clientSecretParameterName = CLIENT_SECRET_PARAMETER_NAME; jwtOptions = JWT_OPTIONS; userInfoParams = null; headers = null; }
Constructor to create an options from JSON
Params:
  • json – the JSON
/** * Constructor to create an options from JSON * * @param json the JSON */
public OAuth2ClientOptions(JsonObject json) { super(json); init(); OAuth2ClientOptionsConverter.fromJson(json, this); }
Get the Oauth2 authorization resource path. e.g.: /oauth/authorize
Returns:authorization path
/** * Get the Oauth2 authorization resource path. e.g.: /oauth/authorize * @return authorization path */
public String getAuthorizationPath() { return authorizationPath; } public OAuth2ClientOptions setAuthorizationPath(String authorizationPath) { this.authorizationPath = authorizationPath; return this; }
Get the Oauth2 token resource path. e.g.: /oauth/token
Returns:token path
/** * Get the Oauth2 token resource path. e.g.: /oauth/token * @return token path */
public String getTokenPath() { return tokenPath; } public OAuth2ClientOptions setTokenPath(String tokenPath) { this.tokenPath = tokenPath; return this; }
Get the Oauth2 revocation resource path. e.g.: /oauth/revoke
Returns:revocation path
/** * Get the Oauth2 revocation resource path. e.g.: /oauth/revoke * @return revocation path */
public String getRevocationPath() { return revocationPath; }
Set the Oauth2 revocation resource path. e.g.: /oauth/revoke
Returns:self
/** * Set the Oauth2 revocation resource path. e.g.: /oauth/revoke * @return self */
public OAuth2ClientOptions setRevocationPath(String revocationPath) { this.revocationPath = revocationPath; return this; }
Flag to use HTTP basic auth header with client id, client secret.
Returns:boolean
/** * Flag to use HTTP basic auth header with client id, client secret. * * @return boolean */
public boolean isUseBasicAuthorizationHeader() { return useBasicAuthorizationHeader; }
Flag to use HTTP basic auth header with client id, client secret.
Returns:self
/** * Flag to use HTTP basic auth header with client id, client secret. * * @return self */
public OAuth2ClientOptions setUseBasicAuthorizationHeader(boolean useBasicAuthorizationHeader) { this.useBasicAuthorizationHeader = useBasicAuthorizationHeader; return this; }
When a provider uses a non standard HTTP form field name, the client secret can be overriden here.
Returns:the provider form field name
/** * When a provider uses a non standard HTTP form field name, the client secret can be overriden here. * * @return the provider form field name */
public String getClientSecretParameterName() { return clientSecretParameterName; }
Override the HTTP form field name for client secret
Params:
  • clientSecretParameterName – the new nme
Returns:self
/** * Override the HTTP form field name for client secret * * @param clientSecretParameterName the new nme * @return self */
public OAuth2ClientOptions setClientSecretParameterName(String clientSecretParameterName) { this.clientSecretParameterName = clientSecretParameterName; return this; }
Root URL for the provider
Params:
  • site – a url
Returns:self
/** * Root URL for the provider * @param site a url * @return self */
public OAuth2ClientOptions setSite(String site) { this.site = site; return this; }
Get the provider client id
Returns:client id
/** * Get the provider client id * @return client id */
public String getClientID() { return clientID; }
Set the provider client id
Params:
  • clientID – client id
Returns:self
/** * Set the provider client id * @param clientID client id * @return self */
public OAuth2ClientOptions setClientID(String clientID) { this.clientID = clientID; return this; }
Get the provider client secret
Returns:the client secret
/** * Get the provider client secret * @return the client secret */
public String getClientSecret() { return clientSecret; }
Set the provider client secret
Params:
  • clientSecret – client secret
Returns:self
/** * Set the provider client secret * @param clientSecret client secret * @return self */
public OAuth2ClientOptions setClientSecret(String clientSecret) { this.clientSecret = clientSecret; return this; }
The User-Agent header to use when communicating with a provider
Returns:the user agent string
/** * The User-Agent header to use when communicating with a provider * @return the user agent string */
public String getUserAgent() { return userAgent; }
Set a custom user agent to use when communicating to a provider
Params:
  • userAgent – the user agent
Returns:self
/** * Set a custom user agent to use when communicating to a provider * @param userAgent the user agent * @return self */
public OAuth2ClientOptions setUserAgent(String userAgent) { this.userAgent = userAgent; return this; }
Custom headers to send along with every request.
Returns:the headers as a json structure
/** * Custom headers to send along with every request. * @return the headers as a json structure */
public JsonObject getHeaders() { return headers; }
Set custom headers to be sent with every request to the provider
Params:
  • headers – the headers
Returns:self
/** * Set custom headers to be sent with every request to the provider * @param headers the headers * @return self */
public OAuth2ClientOptions setHeaders(JsonObject headers) { this.headers = headers; return this; }
The provider PubSec key options
Returns:the pub sec key options
/** * The provider PubSec key options * @return the pub sec key options */
public List<PubSecKeyOptions> getPubSecKeys() { return pubSecKeys; } public OAuth2ClientOptions setPubSecKeys(List<PubSecKeyOptions> pubSecKeys) { this.pubSecKeys = pubSecKeys; return this; } public OAuth2ClientOptions addPubSecKey(PubSecKeyOptions pubSecKey) { if (pubSecKeys == null) { pubSecKeys = new ArrayList<>(); } pubSecKeys.add(pubSecKey); return this; }
The provider logout path
Returns:a logout resource path
/** * The provider logout path * @return a logout resource path */
public String getLogoutPath() { return logoutPath; }
Set the provider logout path
Params:
  • logoutPath – a logout resource path
Returns:self
/** * Set the provider logout path * @param logoutPath a logout resource path * @return self */
public OAuth2ClientOptions setLogoutPath(String logoutPath) { this.logoutPath = logoutPath; return this; }
The provider userInfo resource path
Returns:a resouce path
/** * The provider userInfo resource path * @return a resouce path */
public String getUserInfoPath() { return userInfoPath; }
Set the provider userInfo resource path
Params:
  • userInfoPath – a resource path
Returns:self
/** * Set the provider userInfo resource path * @param userInfoPath a resource path * @return self */
public OAuth2ClientOptions setUserInfoPath(String userInfoPath) { this.userInfoPath = userInfoPath; return this; }
Set the provider scope separator
Returns:a single character string usually a space or a plus
/** * Set the provider scope separator * @return a single character string usually a space or a plus */
public String getScopeSeparator() { return scopeSeparator; }
Set the provider scope separator
Params:
  • scopeSeparator – a separator e.g.: ' ', '+', ','
Returns:self
/** * Set the provider scope separator * @param scopeSeparator a separator e.g.: ' ', '+', ',' * @return self */
public OAuth2ClientOptions setScopeSeparator(String scopeSeparator) { this.scopeSeparator = scopeSeparator; return this; }
Extra parameters to send to the provider
Returns:a json representation of the parameters
/** * Extra parameters to send to the provider * @return a json representation of the parameters */
public JsonObject getExtraParameters() { return extraParams; }
Set extra parameters to be sent to the provider on each request
Params:
  • extraParams – a json representation of the parameters
Returns:self
/** * Set extra parameters to be sent to the provider on each request * @param extraParams a json representation of the parameters * @return self */
public OAuth2ClientOptions setExtraParameters(JsonObject extraParams) { this.extraParams = extraParams; return this; }
The provider token introspection resource path
Returns:the resource path
/** * The provider token introspection resource path * @return the resource path */
public String getIntrospectionPath() { return introspectionPath; }
Set the provider token introspection resource path
Params:
  • introspectionPath – a resource path
Returns:self
/** * Set the provider token introspection resource path * @param introspectionPath a resource path * @return self */
public OAuth2ClientOptions setIntrospectionPath(String introspectionPath) { this.introspectionPath = introspectionPath; return this; }
Set the provider custom userInfo parameters to send when requesting them.
Returns:a json representation of the extra parameters
/** * Set the provider custom userInfo parameters to send when requesting them. * @return a json representation of the extra parameters */
public JsonObject getUserInfoParameters() { return userInfoParams; }
Set custom parameters to be sent during the userInfo resource request
Params:
  • userInfoParams – json representation of the parameters
Returns:self
/** * Set custom parameters to be sent during the userInfo resource request * @param userInfoParams json representation of the parameters * @return self */
public OAuth2ClientOptions setUserInfoParameters(JsonObject userInfoParams) { this.userInfoParams = userInfoParams; return this; } public String getJwkPath() { return jwkPath; } public OAuth2ClientOptions setJwkPath(String jwkPath) { this.jwkPath = jwkPath; return this; } public JWTOptions getJWTOptions() { return jwtOptions; } public OAuth2ClientOptions setJWTOptions(JWTOptions jwtOptions) { this.jwtOptions = jwtOptions; return this; } public OAuth2FlowType getFlow() { return flow; } public OAuth2ClientOptions setFlow(OAuth2FlowType flow) { this.flow = flow; return this; } public boolean isValidateIssuer() { return validateIssuer; } public OAuth2ClientOptions setValidateIssuer(boolean validateIssuer) { this.validateIssuer = validateIssuer; return this; } }