package examples;
import io.vertx.core.Vertx;
import io.vertx.core.http.HttpServerResponse;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.auth.User;
import io.vertx.ext.auth.oauth2.*;
import io.vertx.ext.auth.oauth2.providers.KeycloakAuth;
import io.vertx.ext.auth.oauth2.providers.OpenIDConnectAuth;
import io.vertx.ext.auth.oauth2.rbac.MicroProfileRBAC;
public class AuthOAuth2Examples {
public void example1(Vertx vertx) {
OAuth2Auth oauth2 = OAuth2Auth.create(vertx, OAuth2FlowType.AUTH_CODE, new OAuth2ClientOptions()
.setClientID("YOUR_CLIENT_ID")
.setClientSecret("YOUR_CLIENT_SECRET")
.setSite("https://github.com/login")
.setTokenPath("/oauth/access_token")
.setAuthorizationPath("/oauth/authorize")
);
String authorization_uri = oauth2.authorizeURL(new JsonObject()
.put("redirect_uri", "http://localhost:8080/callback")
.put("scope", "notifications")
.put("state", "3(#0/!~"));
String code = "xxxxxxxxxxxxxxxxxxxxxxxx";
oauth2.authenticate(new JsonObject().put("code", code).put("redirect_uri", "http://localhost:8080/callback"), res -> {
if (res.failed()) {
} else {
}
});
}
public void example2(Vertx vertx, HttpServerResponse response) {
OAuth2ClientOptions credentials = new OAuth2ClientOptions()
.setClientID("<client-id>")
.setClientSecret("<client-secret>")
.setSite("https://api.oauth.com");
OAuth2Auth oauth2 = OAuth2Auth.create(vertx, OAuth2FlowType.AUTH_CODE, credentials);
String authorization_uri = oauth2.authorizeURL(new JsonObject()
.put("redirect_uri", "http://localhost:8080/callback")
.put("scope", "<scope>")
.put("state", "<state>"));
response.putHeader("Location", authorization_uri)
.setStatusCode(302)
.end();
JsonObject tokenConfig = new JsonObject()
.put("code", "<code>")
.put("redirect_uri", "http://localhost:3000/callback");
oauth2.authenticate(tokenConfig, res -> {
if (res.failed()) {
System.err.println("Access Token Error: " + res.cause().getMessage());
} else {
User token = res.result();
}
});
}
public void example3(Vertx vertx) {
OAuth2Auth oauth2 = OAuth2Auth.create(vertx, OAuth2FlowType.PASSWORD);
JsonObject tokenConfig = new JsonObject()
.put("username", "username")
.put("password", "password");
oauth2.authenticate(tokenConfig, res -> {
if (res.failed()) {
System.err.println("Access Token Error: " + res.cause().getMessage());
} else {
AccessToken token = (AccessToken) res.result();
token.fetch("/users", res2 -> {
});
}
});
}
public void example4(Vertx vertx) {
OAuth2ClientOptions credentials = new OAuth2ClientOptions()
.setClientID("<client-id>")
.setClientSecret("<client-secret>")
.setSite("https://api.oauth.com");
OAuth2Auth oauth2 = OAuth2Auth.create(vertx, OAuth2FlowType.CLIENT, credentials);
JsonObject tokenConfig = new JsonObject();
oauth2.authenticate(tokenConfig, res -> {
if (res.failed()) {
System.err.println("Access Token Error: " + res.cause().getMessage());
} else {
User token = res.result();
}
});
}
public void example5(AccessToken token) {
if (token.expired()) {
token.refresh(res -> {
if (res.succeeded()) {
} else {
}
});
}
}
public void example6(AccessToken token) {
token.revoke("access_token", res -> {
token.revoke("refresh_token", res1 -> System.out.println("token revoked."));
});
}
public void example13(Vertx vertx) {
JsonObject keycloakJson = new JsonObject()
.put("realm", "master")
.put("realm-public-key", "MIIBIjANBgkqhk...wIDAQAB")
.put("auth-server-url", "http://localhost:9000/auth")
.put("ssl-required", "external")
.put("resource", "frontend")
.put("credentials", new JsonObject()
.put("secret", "2fbf5e18-b923-4a83-9657-b4ebd5317f60"));
OAuth2Auth oauth2 = KeycloakAuth.create(vertx, OAuth2FlowType.PASSWORD, keycloakJson);
oauth2.authenticate(new JsonObject().put("username", "user").put("password", "secret"), res -> {
if (res.failed()) {
} else {
AccessToken token = (AccessToken) res.result();
token.isAuthorized("account:manage-account", r -> {
if (r.result()) {
}
});
}
});
}
public void example14(JsonObject principal) {
JsonObject idToken = KeycloakHelper.idToken(principal);
String username = KeycloakHelper.preferredUsername(principal);
}
public void example15(OAuth2Auth oauth2, AccessToken token) {
oauth2.introspectToken("opaque string", res -> {
if (res.succeeded()) {
AccessToken accessToken = res.result();
}
});
token.introspect(res -> {
if (res.succeeded()) {
}
});
}
public void example16(OAuth2Auth oauth2) {
oauth2.decodeToken("jwt-token", res -> {
if (res.succeeded()) {
AccessToken accessToken = res.result();
}
});
}
public void example17(AccessToken user) {
user.isAuthorized("print", res -> {
if (res.succeeded() && res.result()) {
}
});
}
public void example18(AccessToken user) {
user.isAuthorized("realm:add-user", res -> {
if (res.succeeded() && res.result()) {
}
});
}
public void example19(AccessToken user) {
user.isAuthorized("finance:year-report", res -> {
if (res.succeeded() && res.result()) {
}
});
}
public void example20(AccessToken user) {
user.logout(res -> {
if (res.succeeded()) {
} else {
System.out.println(res.cause());
}
});
}
public void example21(AccessToken user) {
boolean isExpired = user.expired();
}
public void example22(AccessToken user) {
user.refresh(res -> {
if (res.succeeded()) {
} else {
}
});
}
public void example23(AccessToken user) {
user.revoke("access_token", res -> {
if (res.succeeded()) {
} else {
}
});
}
public void example24(AccessToken user) {
user.introspect(res -> {
if (res.succeeded()) {
} else {
}
});
}
public void example25(Vertx vertx) {
OpenIDConnectAuth.discover(
vertx,
new OAuth2ClientOptions()
.setSite("https://accounts.google.com")
.setClientID("clientId"),
res -> {
if (res.succeeded()) {
} else {
}
});
}
public void example26(Vertx vertx) {
OpenIDConnectAuth.discover(
vertx,
new OAuth2ClientOptions()
.setSite("http://server:port/auth/realms/your_realm")
.setClientID("clientId"),
res -> {
if (res.succeeded()) {
} else {
}
});
}
public void example27(OAuth2Auth oauth2Auth) {
oauth2Auth.rbacHandler(MicroProfileRBAC.create());
}
}