Skip to content

Commit

Permalink
Replace LocalIdentityAuthentication by SelfManagedAuthentication
Browse files Browse the repository at this point in the history
  • Loading branch information
chDame committed Sep 1, 2022
1 parent 3dac5cf commit ce6f34e
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 5 deletions.
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,11 @@ CamundaOperateClient client = new CamundaOperateClient.Builder().authentication(
.operateUrl("https://bru-2.operate.camunda.io/757dbc30-5127-4bed-XXXX-XXXXXXXXXXXX").build();
```

To connect to the **Local** Operate with **Identity & Keycloak**, you need to use the **LocalIdentityAuthentication**. The SaaSAuthentication requires the clientId and clientSecret. You can also change the Keycloak realm and the baseUrl depending on your installation.
To connect to the **Local** Operate with **Identity & Keycloak**, you need to use the **SelfManagedAuthentication**. The SelfManagedAuthentication requires the clientId and clientSecret. You can also change the Keycloak realm and the keycloakUrl depending on your installation.

```java
LocalIdentityAuthentication la = new LocalIdentityAuthentication().clientId("java").clientSecret("foTPogjlI0hidwbDZcYFWzmU8FOQwLx0").baseUrl("http://localhost:18080").keycloakRealm("camunda-platform");
CamundaOperateClient client = new CamundaOperateClient.Builder().authentication(la)
SelfManagedAuthentication sma = new SelfManagedAuthentication().clientId("java").clientSecret("foTPogjlI0hidwbDZcYFWzmU8FOQwLx0").baseUrl("http://localhost:18080").keycloakRealm("camunda-platform");
CamundaOperateClient client = new CamundaOperateClient.Builder().authentication(sma)
.operateUrl("http://localhost:8081/").build();
```

Expand All @@ -100,7 +100,7 @@ You can import it to your maven or gradle project as a dependency
<dependency>
<groupId>io.camunda</groupId>
<artifactId>camunda-operate-client-java</artifactId>
<version>1.2.2</version>
<version>1.3.0</version>
</dependency>
```

Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ plugins {
}

group = 'io.camunda'
version = '1.2.2'
version = '1.3.0'
sourceCompatibility = '8'

repositories {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@
import io.camunda.operate.exception.OperateException;
import io.camunda.operate.util.JsonUtils;

/**
* This Class is used to authenticate against a Self-Managed Camunda 8 Operate.
* @deprecated replaced by {@link io.camunda.operate.auth.SelfManagedAuthentication}
*/
@Deprecated
public class LocalIdentityAuthentication extends JwtAuthentication {

private String clientId;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
package io.camunda.operate.auth;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

import com.fasterxml.jackson.databind.JsonNode;

import io.camunda.operate.CamundaOperateClient;
import io.camunda.operate.exception.OperateException;
import io.camunda.operate.util.JsonUtils;

/**
* This Class is used to authenticate against a Self-Managed Camunda 8 Operate.
*/
public class SelfManagedAuthentication extends JwtAuthentication {

private String clientId;
private String clientSecret;
private String keycloakUrl = "http://localhost:18080";
private String keycloakRealm = "camunda-platform";

public SelfManagedAuthentication() {
}

public SelfManagedAuthentication(String clientId, String clientSecret) {
this.clientId = clientId;
this.clientSecret = clientSecret;
}

public SelfManagedAuthentication clientId(String clientId) {
this.clientId = clientId;
return this;
}
public SelfManagedAuthentication clientSecret(String clientSecret) {
this.clientSecret = clientSecret;
return this;
}
public SelfManagedAuthentication keycloakUrl(String url) {
this.keycloakUrl = url;
return this;
}
public SelfManagedAuthentication keycloakRealm(String keycloakRealm) {
this.keycloakRealm = keycloakRealm;
return this;
}

private String encode(String value) throws UnsupportedEncodingException {
return URLEncoder.encode(value, StandardCharsets.UTF_8.toString());
}

private String getConnectionString() throws UnsupportedEncodingException{
return "grant_type=client_credentials&client_id="+encode(clientId)+"&client_secret="+encode(clientSecret);
}

@Override
public void authenticate(CamundaOperateClient client) throws OperateException {
try {
URL url = new URL(this.keycloakUrl+"/auth/realms/"+keycloakRealm+"/protocol/openid-connect/token");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setUseCaches(false);
conn.setConnectTimeout(1000 * 5);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

String data = getConnectionString();

conn.getOutputStream().write(data.getBytes(StandardCharsets.UTF_8));
conn.connect();

if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
try (BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"))) {
StringBuilder response = new StringBuilder();
String responseLine = null;
while ((responseLine = br.readLine()) != null) {
response.append(responseLine.trim());
}
JsonNode responseBody = JsonUtils.toJsonNode(response.toString());
String token = responseBody.get("access_token").asText();
setToken(client, token);
}
} else {
throw new OperateException("Error "+conn.getResponseCode()+" obtaining access token : "+conn.getResponseMessage());
}
} catch (IOException e) {
throw new OperateException(e);
}
}
}

0 comments on commit ce6f34e

Please sign in to comment.