|
@@ -46,6 +46,8 @@ import org.elasticsearch.client.security.ExpressionRoleMapping;
|
|
|
import org.elasticsearch.client.security.GetRoleMappingsRequest;
|
|
|
import org.elasticsearch.client.security.GetRoleMappingsResponse;
|
|
|
import org.elasticsearch.client.security.GetSslCertificatesResponse;
|
|
|
+import org.elasticsearch.client.security.InvalidateTokenRequest;
|
|
|
+import org.elasticsearch.client.security.InvalidateTokenResponse;
|
|
|
import org.elasticsearch.client.security.PutRoleMappingRequest;
|
|
|
import org.elasticsearch.client.security.PutRoleMappingResponse;
|
|
|
import org.elasticsearch.client.security.PutUserRequest;
|
|
@@ -134,11 +136,11 @@ public class SecurityDocumentationIT extends ESRestHighLevelClientTestCase {
|
|
|
{
|
|
|
// tag::put-role-mapping-execute
|
|
|
final RoleMapperExpression rules = AnyRoleMapperExpression.builder()
|
|
|
- .addExpression(FieldRoleMapperExpression.ofUsername("*"))
|
|
|
- .addExpression(FieldRoleMapperExpression.ofGroups("cn=admins,dc=example,dc=com"))
|
|
|
- .build();
|
|
|
+ .addExpression(FieldRoleMapperExpression.ofUsername("*"))
|
|
|
+ .addExpression(FieldRoleMapperExpression.ofGroups("cn=admins,dc=example,dc=com"))
|
|
|
+ .build();
|
|
|
final PutRoleMappingRequest request = new PutRoleMappingRequest("mapping-example", true, Collections.singletonList("superuser"),
|
|
|
- rules, null, RefreshPolicy.NONE);
|
|
|
+ rules, null, RefreshPolicy.NONE);
|
|
|
final PutRoleMappingResponse response = client.security().putRoleMapping(request, RequestOptions.DEFAULT);
|
|
|
// end::put-role-mapping-execute
|
|
|
// tag::put-role-mapping-response
|
|
@@ -149,11 +151,11 @@ public class SecurityDocumentationIT extends ESRestHighLevelClientTestCase {
|
|
|
|
|
|
{
|
|
|
final RoleMapperExpression rules = AnyRoleMapperExpression.builder()
|
|
|
- .addExpression(FieldRoleMapperExpression.ofUsername("*"))
|
|
|
- .addExpression(FieldRoleMapperExpression.ofGroups("cn=admins,dc=example,dc=com"))
|
|
|
- .build();
|
|
|
+ .addExpression(FieldRoleMapperExpression.ofUsername("*"))
|
|
|
+ .addExpression(FieldRoleMapperExpression.ofGroups("cn=admins,dc=example,dc=com"))
|
|
|
+ .build();
|
|
|
final PutRoleMappingRequest request = new PutRoleMappingRequest("mapping-example", true, Collections.singletonList("superuser"),
|
|
|
- rules, null, RefreshPolicy.NONE);
|
|
|
+ rules, null, RefreshPolicy.NONE);
|
|
|
// tag::put-role-mapping-execute-listener
|
|
|
ActionListener<PutRoleMappingResponse> listener = new ActionListener<PutRoleMappingResponse>() {
|
|
|
@Override
|
|
@@ -184,21 +186,21 @@ public class SecurityDocumentationIT extends ESRestHighLevelClientTestCase {
|
|
|
final RestHighLevelClient client = highLevelClient();
|
|
|
|
|
|
final RoleMapperExpression rules1 = AnyRoleMapperExpression.builder().addExpression(FieldRoleMapperExpression.ofUsername("*"))
|
|
|
- .addExpression(FieldRoleMapperExpression.ofGroups("cn=admins,dc=example,dc=com")).build();
|
|
|
+ .addExpression(FieldRoleMapperExpression.ofGroups("cn=admins,dc=example,dc=com")).build();
|
|
|
final PutRoleMappingRequest putRoleMappingRequest1 = new PutRoleMappingRequest("mapping-example-1", true, Collections.singletonList(
|
|
|
- "superuser"), rules1, null, RefreshPolicy.NONE);
|
|
|
+ "superuser"), rules1, null, RefreshPolicy.NONE);
|
|
|
final PutRoleMappingResponse putRoleMappingResponse1 = client.security().putRoleMapping(putRoleMappingRequest1,
|
|
|
- RequestOptions.DEFAULT);
|
|
|
+ RequestOptions.DEFAULT);
|
|
|
boolean isCreated1 = putRoleMappingResponse1.isCreated();
|
|
|
assertTrue(isCreated1);
|
|
|
final RoleMapperExpression rules2 = AnyRoleMapperExpression.builder().addExpression(FieldRoleMapperExpression.ofGroups(
|
|
|
- "cn=admins,dc=example,dc=com")).build();
|
|
|
+ "cn=admins,dc=example,dc=com")).build();
|
|
|
final Map<String, Object> metadata2 = new HashMap<>();
|
|
|
metadata2.put("k1", "v1");
|
|
|
final PutRoleMappingRequest putRoleMappingRequest2 = new PutRoleMappingRequest("mapping-example-2", true, Collections.singletonList(
|
|
|
- "monitoring"), rules2, metadata2, RefreshPolicy.NONE);
|
|
|
+ "monitoring"), rules2, metadata2, RefreshPolicy.NONE);
|
|
|
final PutRoleMappingResponse putRoleMappingResponse2 = client.security().putRoleMapping(putRoleMappingRequest2,
|
|
|
- RequestOptions.DEFAULT);
|
|
|
+ RequestOptions.DEFAULT);
|
|
|
boolean isCreated2 = putRoleMappingResponse2.isCreated();
|
|
|
assertTrue(isCreated2);
|
|
|
|
|
@@ -229,7 +231,7 @@ public class SecurityDocumentationIT extends ESRestHighLevelClientTestCase {
|
|
|
assertThat(mappings.size(), is(2));
|
|
|
for (ExpressionRoleMapping roleMapping : mappings) {
|
|
|
assertThat(roleMapping.isEnabled(), is(true));
|
|
|
- assertThat(roleMapping.getName(), isIn(new String[] { "mapping-example-1", "mapping-example-2" }));
|
|
|
+ assertThat(roleMapping.getName(), isIn(new String[]{"mapping-example-1", "mapping-example-2"}));
|
|
|
if (roleMapping.getName().equals("mapping-example-1")) {
|
|
|
assertThat(roleMapping.getMetadata(), equalTo(Collections.emptyMap()));
|
|
|
assertThat(roleMapping.getExpression(), equalTo(rules1));
|
|
@@ -252,7 +254,7 @@ public class SecurityDocumentationIT extends ESRestHighLevelClientTestCase {
|
|
|
assertThat(mappings.size(), is(2));
|
|
|
for (ExpressionRoleMapping roleMapping : mappings) {
|
|
|
assertThat(roleMapping.isEnabled(), is(true));
|
|
|
- assertThat(roleMapping.getName(), isIn(new String[] { "mapping-example-1", "mapping-example-2" }));
|
|
|
+ assertThat(roleMapping.getName(), isIn(new String[]{"mapping-example-1", "mapping-example-2"}));
|
|
|
if (roleMapping.getName().equals("mapping-example-1")) {
|
|
|
assertThat(roleMapping.getMetadata(), equalTo(Collections.emptyMap()));
|
|
|
assertThat(roleMapping.getExpression(), equalTo(rules1));
|
|
@@ -605,7 +607,7 @@ public class SecurityDocumentationIT extends ESRestHighLevelClientTestCase {
|
|
|
// Create role mappings
|
|
|
final RoleMapperExpression rules = FieldRoleMapperExpression.ofUsername("*");
|
|
|
final PutRoleMappingRequest request = new PutRoleMappingRequest("mapping-example", true, Collections.singletonList("superuser"),
|
|
|
- rules, null, RefreshPolicy.NONE);
|
|
|
+ rules, null, RefreshPolicy.NONE);
|
|
|
final PutRoleMappingResponse response = client.security().putRoleMapping(request, RequestOptions.DEFAULT);
|
|
|
boolean isCreated = response.isCreated();
|
|
|
assertTrue(isCreated);
|
|
@@ -792,6 +794,78 @@ public class SecurityDocumentationIT extends ESRestHighLevelClientTestCase {
|
|
|
// "client-credentials" grants aren't refreshable
|
|
|
assertNull(future.get().getRefreshToken());
|
|
|
}
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testInvalidateToken() throws Exception {
|
|
|
+ RestHighLevelClient client = highLevelClient();
|
|
|
+
|
|
|
+ String accessToken;
|
|
|
+ String refreshToken;
|
|
|
+ {
|
|
|
+ // Setup user
|
|
|
+ final char[] password = "password".toCharArray();
|
|
|
+ PutUserRequest putUserRequest = new PutUserRequest("invalidate_token", password,
|
|
|
+ Collections.singletonList("kibana_user"), null, null, true, null, RefreshPolicy.IMMEDIATE);
|
|
|
+ PutUserResponse putUserResponse = client.security().putUser(putUserRequest, RequestOptions.DEFAULT);
|
|
|
+ assertTrue(putUserResponse.isCreated());
|
|
|
|
|
|
+ // Create tokens
|
|
|
+ final CreateTokenRequest createTokenRequest = CreateTokenRequest.passwordGrant("invalidate_token", password);
|
|
|
+ final CreateTokenResponse tokenResponse = client.security().createToken(createTokenRequest, RequestOptions.DEFAULT);
|
|
|
+ accessToken = tokenResponse.getAccessToken();
|
|
|
+ refreshToken = tokenResponse.getRefreshToken();
|
|
|
+ }
|
|
|
+ {
|
|
|
+ // tag::invalidate-access-token-request
|
|
|
+ InvalidateTokenRequest invalidateTokenRequest = InvalidateTokenRequest.accessToken(accessToken);
|
|
|
+ // end::invalidate-access-token-request
|
|
|
+
|
|
|
+ // tag::invalidate-token-execute
|
|
|
+ InvalidateTokenResponse invalidateTokenResponse =
|
|
|
+ client.security().invalidateToken(invalidateTokenRequest, RequestOptions.DEFAULT);
|
|
|
+ // end::invalidate-token-execute
|
|
|
+
|
|
|
+ // tag::invalidate-token-response
|
|
|
+ boolean isCreated = invalidateTokenResponse.isCreated();
|
|
|
+ // end::invalidate-token-response
|
|
|
+ assertTrue(isCreated);
|
|
|
+ }
|
|
|
+
|
|
|
+ {
|
|
|
+ // tag::invalidate-refresh-token-request
|
|
|
+ InvalidateTokenRequest invalidateTokenRequest = InvalidateTokenRequest.refreshToken(refreshToken);
|
|
|
+ // end::invalidate-refresh-token-request
|
|
|
+
|
|
|
+ ActionListener<InvalidateTokenResponse> listener;
|
|
|
+ //tag::invalidate-token-execute-listener
|
|
|
+ listener = new ActionListener<InvalidateTokenResponse>() {
|
|
|
+ @Override
|
|
|
+ public void onResponse(InvalidateTokenResponse invalidateTokenResponse) {
|
|
|
+ // <1>
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onFailure(Exception e) {
|
|
|
+ // <2>
|
|
|
+ }
|
|
|
+ };
|
|
|
+ //end::invalidate-token-execute-listener
|
|
|
+
|
|
|
+ // Avoid unused variable warning
|
|
|
+ assertNotNull(listener);
|
|
|
+
|
|
|
+ // Replace the empty listener by a blocking listener in test
|
|
|
+ final PlainActionFuture<InvalidateTokenResponse> future = new PlainActionFuture<>();
|
|
|
+ listener = future;
|
|
|
+
|
|
|
+ //tag::invalidate-token-execute-async
|
|
|
+ client.security().invalidateTokenAsync(invalidateTokenRequest, RequestOptions.DEFAULT, listener); // <1>
|
|
|
+ //end::invalidate-token-execute-async
|
|
|
+
|
|
|
+ final InvalidateTokenResponse response = future.get(30, TimeUnit.SECONDS);
|
|
|
+ assertNotNull(response);
|
|
|
+ assertTrue(response.isCreated());// technically, this should be false, but the API is broken
|
|
|
+ // See https://github.com/elastic/elasticsearch/issues/35115
|
|
|
+ }
|
|
|
}
|
|
|
}
|