/*
* Copyright 2015 Red Hat, Inc.
*
* 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.Fluent;
import io.vertx.codegen.annotations.VertxGen;
import io.vertx.core.AsyncResult;
import io.vertx.core.Handler;
import io.vertx.core.Vertx;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.auth.AuthProvider;
import io.vertx.ext.auth.PubSecKeyOptions;
import io.vertx.ext.auth.oauth2.impl.OAuth2AuthProviderImpl;
Factory interface for creating OAuth2 based AuthProvider
instances. Author: Paulo Lopes
/**
* Factory interface for creating OAuth2 based {@link io.vertx.ext.auth.AuthProvider} instances.
*
* @author Paulo Lopes
*/
@VertxGen
public interface OAuth2Auth extends AuthProvider {
Params: - vertx – the Vertx instance
- config – the config as exported from the admin console
Deprecated: You should use the provider helper KeycloakAuth
instead. Create a OAuth2 auth provider Returns: the auth provider
/**
* @deprecated You should use the provider helper {@link io.vertx.ext.auth.oauth2.providers.KeycloakAuth} instead.
*
* Create a OAuth2 auth provider
*
* @param vertx the Vertx instance
* @param config the config as exported from the admin console
* @return the auth provider
*/
@Deprecated
static OAuth2Auth createKeycloak(Vertx vertx, OAuth2FlowType flow, JsonObject config) {
final OAuth2ClientOptions options = new OAuth2ClientOptions();
// keycloak conversion to oauth2 options
if (config.containsKey("auth-server-url")) {
options.setSite(config.getString("auth-server-url"));
}
if (config.containsKey("resource")) {
options.setClientID(config.getString("resource"));
}
if (config.containsKey("credentials") && config.getJsonObject("credentials").containsKey("secret")) {
options.setClientSecret(config.getJsonObject("credentials").getString("secret"));
}
if (config.containsKey("public-client") && config.getBoolean("public-client", false)) {
options.setUseBasicAuthorizationHeader(true);
}
if (config.containsKey("realm")) {
final String realm = config.getString("realm");
options.setAuthorizationPath("/realms/" + realm + "/protocol/openid-connect/auth");
options.setTokenPath("/realms/" + realm + "/protocol/openid-connect/token");
options.setRevocationPath(null);
options.setLogoutPath("/realms/" + realm + "/protocol/openid-connect/logout");
options.setUserInfoPath("/realms/" + realm + "/protocol/openid-connect/userinfo");
}
if (config.containsKey("realm-public-key")) {
options.addPubSecKey(new PubSecKeyOptions()
.setAlgorithm("RS256")
.setPublicKey(config.getString("realm-public-key")));
}
return new OAuth2AuthProviderImpl(vertx, options.setFlow(flow));
}
Create a OAuth2 auth provider
Params: - vertx – the Vertx instance
- config – the config
Deprecated: the flow configuration should be passed in the config object Returns: the auth provider
/**
* Create a OAuth2 auth provider
*
* @deprecated the flow configuration should be passed in the config object
*
* @param vertx the Vertx instance
* @param config the config
* @return the auth provider
*/
@Deprecated
static OAuth2Auth create(Vertx vertx, OAuth2FlowType flow, OAuth2ClientOptions config) {
return new OAuth2AuthProviderImpl(vertx, config.setFlow(flow));
}
Create a OAuth2 auth provider
Params: - vertx – the Vertx instance
Deprecated: the flow configuration should be passed in the config object Returns: the auth provider
/**
* Create a OAuth2 auth provider
*
* @deprecated the flow configuration should be passed in the config object
*
* @param vertx the Vertx instance
* @return the auth provider
*/
@Deprecated
static OAuth2Auth create(Vertx vertx, OAuth2FlowType flow) {
return new OAuth2AuthProviderImpl(vertx, new OAuth2ClientOptions().setFlow(flow));
}
Create a OAuth2 auth provider
Params: - vertx – the Vertx instance
Returns: the auth provider
/**
* Create a OAuth2 auth provider
*
* @param vertx the Vertx instance
* @return the auth provider
*/
static OAuth2Auth create(Vertx vertx) {
return create(vertx, new OAuth2ClientOptions());
}
Create a OAuth2 auth provider
Params: - vertx – the Vertx instance
- config – the config
Returns: the auth provider
/**
* Create a OAuth2 auth provider
*
* @param vertx the Vertx instance
* @param config the config
* @return the auth provider
*/
static OAuth2Auth create(Vertx vertx, OAuth2ClientOptions config) {
return new OAuth2AuthProviderImpl(vertx, config);
}
Generate a redirect URL to the authN/Z backend. It only applies to auth_code flow.
/**
* Generate a redirect URL to the authN/Z backend. It only applies to auth_code flow.
*/
String authorizeURL(JsonObject params);
Returns the Access Token object.
Params: - params – - JSON with the options, each flow requires different options.
- handler – - The handler returning the results.
Deprecated: use AuthProvider.authenticate(JsonObject, Handler<AsyncResult<User>>)
instead.
/**
* Returns the Access Token object.
*
* @deprecated use {@link AuthProvider#authenticate(JsonObject, Handler)} instead.
*
* @param params - JSON with the options, each flow requires different options.
* @param handler - The handler returning the results.
*/
@Deprecated
void getToken(JsonObject params, Handler<AsyncResult<AccessToken>> handler);
Decode a token to a AccessToken
object. This is useful to handle bearer JWT tokens. Params: - token – the access token (base64 string)
- handler – A handler to receive the event
Deprecated: use AuthProvider.authenticate(JsonObject, Handler<AsyncResult<User>>)
instead. Returns: self
/**
* Decode a token to a {@link AccessToken} object. This is useful to handle bearer JWT tokens.
*
* @deprecated use {@link AuthProvider#authenticate(JsonObject, Handler)} instead.
*
* @param token the access token (base64 string)
* @param handler A handler to receive the event
* @return self
*/
@Fluent
@Deprecated
OAuth2Auth decodeToken(String token, Handler<AsyncResult<AccessToken>> handler);
Query an OAuth 2.0 authorization server to determine the active state of an OAuth 2.0 token and to determine
meta-information about this token.
Params: - token – the access token (base64 string)
- handler – A handler to receive the event
Returns: self
/**
* Query an OAuth 2.0 authorization server to determine the active state of an OAuth 2.0 token and to determine
* meta-information about this token.
*
* @param token the access token (base64 string)
* @param handler A handler to receive the event
* @return self
*/
@Fluent
default OAuth2Auth introspectToken(String token, Handler<AsyncResult<AccessToken>> handler) {
return introspectToken(token, "access_token", handler);
}
Query an OAuth 2.0 authorization server to determine the active state of an OAuth 2.0 token and to determine
meta-information about this token.
Params: - token – the access token (base64 string)
- tokenType – hint to the token type e.g.: `access_token`
- handler – A handler to receive the event
Returns: self
/**
* Query an OAuth 2.0 authorization server to determine the active state of an OAuth 2.0 token and to determine
* meta-information about this token.
*
* @param token the access token (base64 string)
* @param tokenType hint to the token type e.g.: `access_token`
* @param handler A handler to receive the event
* @return self
*/
@Fluent
OAuth2Auth introspectToken(String token, String tokenType, Handler<AsyncResult<AccessToken>> handler);
Returns the scope separator.
The RFC 6749 states that a scope is expressed as a set of case-sensitive and space-delimited strings, however
vendors tend not to agree on this and we see the following cases being used: space, plus sign, comma.
Returns: what value was used in the configuration of the object, falling back to the default value
which is a space.
/**
* Returns the scope separator.
*
* The RFC 6749 states that a scope is expressed as a set of case-sensitive and space-delimited strings, however
* vendors tend not to agree on this and we see the following cases being used: space, plus sign, comma.
*
* @return what value was used in the configuration of the object, falling back to the default value
* which is a space.
*/
@Deprecated
String getScopeSeparator();
Returns the configured flow type for the Oauth2 provider.
Returns: the flow type.
/**
* Returns the configured flow type for the Oauth2 provider.
*
* @return the flow type.
*/
OAuth2FlowType getFlowType();
Loads a JWK Set from the remote provider.
When calling this method several times, the loaded JWKs are updated in the underlying JWT object.
/**
* Loads a JWK Set from the remote provider.
*
* When calling this method several times, the loaded JWKs are updated in the underlying JWT object.
*/
@Fluent
OAuth2Auth loadJWK(Handler<AsyncResult<Void>> handler);
@Fluent
OAuth2Auth rbacHandler(OAuth2RBAC rbac);
}