Skip to content

Commit 8387560

Browse files
Support for patch clients credentials (#760)
Co-authored-by: marcossegovia <velozmarkdrea@gmail.com>
1 parent 4a3db88 commit 8387560

File tree

3 files changed

+125
-0
lines changed

3 files changed

+125
-0
lines changed

EXAMPLES.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
- [HTTP Client configuration](#http-client-configuration)
55
- [Verifying an ID token](#verifying-an-id-token)
66
- [Organizations](#organizations)
7+
- [Client credential management](#client-credential-management)
78
- [Asynchronous operations](#asynchronous-operations)
89

910
## Error handling
@@ -144,6 +145,59 @@ String url = auth.authorizeUrl("https://me.auth0.com/callback")
144145
.build();
145146
```
146147

148+
## Client credential management
149+
150+
The SDK provides comprehensive support for managing client credentials used for machine-to-machine authentication and API access.
151+
152+
### List client credentials
153+
154+
```java
155+
ManagementAPI mgmt = ManagementAPI.newBuilder("{YOUR_DOMAIN}", "{YOUR_API_TOKEN}").build();
156+
Request<List<Credential>> request = mgmt.clients().listCredentials("{CLIENT_ID}");
157+
List<Credential> credentials = request.execute().getBody();
158+
```
159+
160+
### Get a specific client credential
161+
162+
```java
163+
Request<Credential> request = mgmt.clients().getCredential("{CLIENT_ID}", "{CREDENTIAL_ID}");
164+
Credential credential = request.execute().getBody();
165+
```
166+
167+
### Create a new client credential
168+
169+
```java
170+
Credential newCredential = new Credential("public_key", "{PEM_CONTENT}");
171+
newCredential.setName("My API Credential");
172+
Request<Credential> request = mgmt.clients().createCredential("{CLIENT_ID}", newCredential);
173+
Credential createdCredential = request.execute().getBody();
174+
```
175+
176+
### Update an existing client credential
177+
178+
```java
179+
Credential updates = new Credential();
180+
updates.setExpiresAt("<DATE>");
181+
// Note: expires_at can also be updated by setting a Date object
182+
Request<Credential> request = mgmt.clients().updateCredential("{CLIENT_ID}", "{CREDENTIAL_ID}", updates);
183+
Credential updatedCredential = request.execute().getBody();
184+
```
185+
186+
### Delete a client credential
187+
188+
```java
189+
Request<Void> request = mgmt.clients().deleteCredential("{CLIENT_ID}", "{CREDENTIAL_ID}");
190+
request.execute();
191+
```
192+
193+
**Required Scopes**:
194+
- `read:client_credentials` - for listing and getting credentials
195+
- `create:client_credentials` - for creating new credentials
196+
- `update:client_credentials` - for updating existing credentials
197+
- `delete:client_credentials` - for deleting credentials
198+
199+
For more information, see the [Auth0 Management API documentation](https://auth0.com/docs/api/management/v2/clients).
200+
147201
## Asynchronous operations
148202

149203
Requests can be executed asynchronously, using the `executeAsync()` method, which returns a `CompletableFuture<T>`.

src/main/java/com/auth0/client/mgmt/ClientsEntity.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,4 +265,32 @@ public Request<Void> deleteCredential(String clientId, String credentialId) {
265265
.toString();
266266
return new VoidRequest(client, tokenProvider, url, HttpMethod.DELETE);
267267
}
268+
269+
/**
270+
* Update an existing client credential. A token with scope update:client_credentials is needed.
271+
* See https://auth0.com/docs/api/management/v2/clients/patch-credentials-by-credential-id
272+
*
273+
* @param clientId the application's client id.
274+
* @param credentialId the ID of the credential.
275+
* @param credential the credential to update.
276+
* @return a Request to execute.
277+
*/
278+
public Request<Credential> updateCredential(String clientId, String credentialId, Credential credential) {
279+
Asserts.assertNotNull(clientId, "client id");
280+
Asserts.assertNotNull(credentialId, "credential id");
281+
Asserts.assertNotNull(credential, "credential");
282+
283+
String url = baseUrl
284+
.newBuilder()
285+
.addPathSegments("api/v2/clients")
286+
.addPathSegment(clientId)
287+
.addPathSegment("credentials")
288+
.addPathSegment(credentialId)
289+
.build()
290+
.toString();
291+
BaseRequest<Credential> request = new BaseRequest<>(this.client, tokenProvider, url, HttpMethod.PATCH, new TypeReference<Credential>() {
292+
});
293+
request.setBody(credential);
294+
return request;
295+
}
268296
}

src/test/java/com/auth0/client/mgmt/ClientsEntityTest.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,4 +461,47 @@ public void shouldThrowOnDeleteCredentialsWithNullCredentialId() {
461461
() -> api.clients().deleteCredential("clientId", null),
462462
"'credential id' cannot be null!");
463463
}
464+
465+
@Test
466+
public void shouldUpdateClientCredential() throws Exception {
467+
Credential credential = new Credential();
468+
credential.setName("Updated credential name");
469+
Request<Credential> request = api.clients().updateCredential("clientId", "credId", credential);
470+
assertThat(request, is(notNullValue()));
471+
472+
server.jsonResponse(MGMT_CLIENT_CREDENTIAL, 200);
473+
Credential response = request.execute().getBody();
474+
RecordedRequest recordedRequest = server.takeRequest();
475+
476+
assertThat(recordedRequest, hasMethodAndPath(HttpMethod.PATCH, "/api/v2/clients/clientId/credentials/credId"));
477+
assertThat(recordedRequest, hasHeader("Content-Type", "application/json"));
478+
assertThat(recordedRequest, hasHeader("Authorization", "Bearer apiToken"));
479+
480+
Map<String, Object> body = bodyFromRequest(recordedRequest);
481+
assertThat(body.size(), is(1));
482+
assertThat(body, hasEntry("name", "Updated credential name"));
483+
484+
assertThat(response, is(notNullValue()));
485+
}
486+
487+
@Test
488+
public void shouldThrowOnUpdateCredentialWithNullClientId() {
489+
verifyThrows(IllegalArgumentException.class,
490+
() -> api.clients().updateCredential(null, "credId", new Credential()),
491+
"'client id' cannot be null!");
492+
}
493+
494+
@Test
495+
public void shouldThrowOnUpdateCredentialWithNullCredentialId() {
496+
verifyThrows(IllegalArgumentException.class,
497+
() -> api.clients().updateCredential("clientId", null, new Credential()),
498+
"'credential id' cannot be null!");
499+
}
500+
501+
@Test
502+
public void shouldThrowOnUpdateCredentialWithNullCredential() {
503+
verifyThrows(IllegalArgumentException.class,
504+
() -> api.clients().updateCredential("clientId", "credId", null),
505+
"'credential' cannot be null!");
506+
}
464507
}

0 commit comments

Comments
 (0)