add missing fields to auth response
* token_policies * entity_id * token_type * orphan
This commit is contained in:
parent
df696e9f17
commit
a4a0e13904
@ -4,7 +4,11 @@
|
|||||||
* Correctly parse Map field for token metadata (#34)
|
* Correctly parse Map field for token metadata (#34)
|
||||||
* Correctly map token policies on lookup (#35)
|
* Correctly map token policies on lookup (#35)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
* Support for token types (#26)
|
||||||
|
|
||||||
### Improvements
|
### Improvements
|
||||||
|
* Added `entity_id`, `token_policies`, `token_type` and `orphan` flags to auth response
|
||||||
* Minor dependency updates
|
* Minor dependency updates
|
||||||
|
|
||||||
|
|
||||||
|
@ -39,6 +39,9 @@ public final class AuthData {
|
|||||||
@JsonProperty("policies")
|
@JsonProperty("policies")
|
||||||
private List<String> policies;
|
private List<String> policies;
|
||||||
|
|
||||||
|
@JsonProperty("token_policies")
|
||||||
|
private List<String> tokenPolicies;
|
||||||
|
|
||||||
@JsonProperty("metadata")
|
@JsonProperty("metadata")
|
||||||
private Map<String, Object> metadata;
|
private Map<String, Object> metadata;
|
||||||
|
|
||||||
@ -48,6 +51,15 @@ public final class AuthData {
|
|||||||
@JsonProperty("renewable")
|
@JsonProperty("renewable")
|
||||||
private boolean renewable;
|
private boolean renewable;
|
||||||
|
|
||||||
|
@JsonProperty("entity_id")
|
||||||
|
private String entityId;
|
||||||
|
|
||||||
|
@JsonProperty("token_type")
|
||||||
|
private String tokenType;
|
||||||
|
|
||||||
|
@JsonProperty("orphan")
|
||||||
|
private boolean orphan;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Client token
|
* @return Client token
|
||||||
*/
|
*/
|
||||||
@ -56,10 +68,11 @@ public final class AuthData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Token accessor
|
* @return Token type
|
||||||
|
* @since 0.9
|
||||||
*/
|
*/
|
||||||
public String getAccessor() {
|
public String getTokenType() {
|
||||||
return accessor;
|
return tokenType;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -69,6 +82,14 @@ public final class AuthData {
|
|||||||
return policies;
|
return policies;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return List of policies associated with the ooken
|
||||||
|
* @since 0.9
|
||||||
|
*/
|
||||||
|
public List<String> getTokenPolicies() {
|
||||||
|
return tokenPolicies;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Metadata
|
* @return Metadata
|
||||||
*/
|
*/
|
||||||
@ -89,4 +110,27 @@ public final class AuthData {
|
|||||||
public boolean isRenewable() {
|
public boolean isRenewable() {
|
||||||
return renewable;
|
return renewable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Entity ID
|
||||||
|
* @since 0.9
|
||||||
|
*/
|
||||||
|
public String getEntityId() {
|
||||||
|
return entityId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Token accessor
|
||||||
|
*/
|
||||||
|
public String getAccessor() {
|
||||||
|
return accessor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Token is orphan
|
||||||
|
* @since 0.9
|
||||||
|
*/
|
||||||
|
public boolean isOrphan() {
|
||||||
|
return orphan;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1050,8 +1050,12 @@ public class HTTPVaultConnectorTest {
|
|||||||
assertThat("Invalid token ID returned.", res.getAuth().getClientToken(), is("test-id"));
|
assertThat("Invalid token ID returned.", res.getAuth().getClientToken(), is("test-id"));
|
||||||
assertThat("Invalid number of policies returned.", res.getAuth().getPolicies(), hasSize(1));
|
assertThat("Invalid number of policies returned.", res.getAuth().getPolicies(), hasSize(1));
|
||||||
assertThat("Root policy not inherited.", res.getAuth().getPolicies(), contains("root"));
|
assertThat("Root policy not inherited.", res.getAuth().getPolicies(), contains("root"));
|
||||||
|
assertThat("Invalid number of token policies returned.", res.getAuth().getTokenPolicies(), hasSize(1));
|
||||||
|
assertThat("Root policy not inherited for token.", res.getAuth().getTokenPolicies(), contains("root"));
|
||||||
|
assertThat("Unexpected token type.", res.getAuth().getTokenType(), is(Token.Type.SERVICE.value()));
|
||||||
assertThat("Metadata unexpected.", res.getAuth().getMetadata(), is(nullValue()));
|
assertThat("Metadata unexpected.", res.getAuth().getMetadata(), is(nullValue()));
|
||||||
assertThat("Root token should not be renewable", res.getAuth().isRenewable(), is(false));
|
assertThat("Root token should not be renewable", res.getAuth().isRenewable(), is(false));
|
||||||
|
assertThat("Root token should not be orphan", res.getAuth().isOrphan(), is(false));
|
||||||
|
|
||||||
// Starting with Vault 1.0 a warning "cusotm ID uses weaker SHA1..." is given.
|
// Starting with Vault 1.0 a warning "cusotm ID uses weaker SHA1..." is given.
|
||||||
if (VAULT_VERSION.startsWith("1.")) {
|
if (VAULT_VERSION.startsWith("1.")) {
|
||||||
@ -1075,12 +1079,12 @@ public class HTTPVaultConnectorTest {
|
|||||||
AuthResponse res = connector.createToken(token);
|
AuthResponse res = connector.createToken(token);
|
||||||
assertThat("Invalid token ID returned.", res.getAuth().getClientToken(), is("test-id2"));
|
assertThat("Invalid token ID returned.", res.getAuth().getClientToken(), is("test-id2"));
|
||||||
assertThat("Invalid number of policies returned.", res.getAuth().getPolicies(), hasSize(1));
|
assertThat("Invalid number of policies returned.", res.getAuth().getPolicies(), hasSize(1));
|
||||||
assertThat("Root policy not inherited.", res.getAuth().getPolicies(), contains("testpolicy"));
|
assertThat("Custom policy not set.", res.getAuth().getPolicies(), contains("testpolicy"));
|
||||||
assertThat("Metadata not given.", res.getAuth().getMetadata(), is(notNullValue()));
|
assertThat("Metadata not given.", res.getAuth().getMetadata(), is(notNullValue()));
|
||||||
assertThat("Metadata not correct.", res.getAuth().getMetadata().get("foo"), is("bar"));
|
assertThat("Metadata not correct.", res.getAuth().getMetadata().get("foo"), is("bar"));
|
||||||
assertThat("Token should be renewable", res.getAuth().isRenewable(), is(true));
|
assertThat("Token should be renewable", res.getAuth().isRenewable(), is(true));
|
||||||
} catch (VaultConnectorException e) {
|
} catch (VaultConnectorException e) {
|
||||||
fail("Secret written to inaccessible path.");
|
fail("Token createion failed: " + e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Overwrite token should fail as of Vault 0.8.0 */
|
/* Overwrite token should fail as of Vault 0.8.0 */
|
||||||
@ -1102,6 +1106,26 @@ public class HTTPVaultConnectorTest {
|
|||||||
/* Assert that the exception does not reveal token ID */
|
/* Assert that the exception does not reveal token ID */
|
||||||
assertThat(stackTrace(e), not(stringContainsInOrder(token.getId())));
|
assertThat(stackTrace(e), not(stringContainsInOrder(token.getId())));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Create token with batch type */
|
||||||
|
token = Token.builder()
|
||||||
|
.withDisplayName("test name 3")
|
||||||
|
.withPolicy("batchpolicy")
|
||||||
|
.withoutDefaultPolicy()
|
||||||
|
.withType(Token.Type.BATCH)
|
||||||
|
.build();
|
||||||
|
try {
|
||||||
|
AuthResponse res = connector.createToken(token);
|
||||||
|
assertThat("Unexpected token prefix", res.getAuth().getClientToken(), startsWith("b."));
|
||||||
|
assertThat("Invalid number of policies returned.", res.getAuth().getPolicies(), hasSize(1));
|
||||||
|
assertThat("Custom policy policy not set.", res.getAuth().getPolicies(), contains("batchpolicy"));
|
||||||
|
assertThat("Token should not be renewable", res.getAuth().isRenewable(), is(false));
|
||||||
|
assertThat("Token should not be orphan", res.getAuth().isOrphan(), is(false));
|
||||||
|
assertThat("Specified token Type not set", res.getAuth().getTokenType(), is(Token.Type.BATCH.value()));
|
||||||
|
|
||||||
|
} catch (VaultConnectorException e) {
|
||||||
|
fail("Token createion failed: " + e.getMessage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -44,6 +44,9 @@ public class AuthResponseTest {
|
|||||||
private static final String AUTH_META_VALUE = "armon";
|
private static final String AUTH_META_VALUE = "armon";
|
||||||
private static final Integer AUTH_LEASE_DURATION = 3600;
|
private static final Integer AUTH_LEASE_DURATION = 3600;
|
||||||
private static final Boolean AUTH_RENEWABLE = true;
|
private static final Boolean AUTH_RENEWABLE = true;
|
||||||
|
private static final String AUTH_ENTITY_ID = "";
|
||||||
|
private static final String AUTH_TOKEN_TYPE = "service";
|
||||||
|
private static final Boolean AUTH_ORPHAN = false;
|
||||||
|
|
||||||
private static final String RES_JSON = "{\n" +
|
private static final String RES_JSON = "{\n" +
|
||||||
" \"auth\": {\n" +
|
" \"auth\": {\n" +
|
||||||
@ -53,11 +56,18 @@ public class AuthResponseTest {
|
|||||||
" \"" + AUTH_POLICY_1 + "\", \n" +
|
" \"" + AUTH_POLICY_1 + "\", \n" +
|
||||||
" \"" + AUTH_POLICY_2 + "\"\n" +
|
" \"" + AUTH_POLICY_2 + "\"\n" +
|
||||||
" ],\n" +
|
" ],\n" +
|
||||||
|
" \"token_policies\": [\n" +
|
||||||
|
" \"" + AUTH_POLICY_2 + "\",\n" +
|
||||||
|
" \"" + AUTH_POLICY_1 + "\" \n" +
|
||||||
|
" ],\n" +
|
||||||
" \"metadata\": {\n" +
|
" \"metadata\": {\n" +
|
||||||
" \"" + AUTH_META_KEY + "\": \"" + AUTH_META_VALUE + "\"\n" +
|
" \"" + AUTH_META_KEY + "\": \"" + AUTH_META_VALUE + "\"\n" +
|
||||||
" },\n" +
|
" },\n" +
|
||||||
" \"lease_duration\": " + AUTH_LEASE_DURATION + ",\n" +
|
" \"lease_duration\": " + AUTH_LEASE_DURATION + ",\n" +
|
||||||
" \"renewable\": " + AUTH_RENEWABLE + "\n" +
|
" \"renewable\": " + AUTH_RENEWABLE + ",\n" +
|
||||||
|
" \"entity_id\": \"" + AUTH_ENTITY_ID + "\",\n" +
|
||||||
|
" \"token_type\": \"" + AUTH_TOKEN_TYPE + "\",\n" +
|
||||||
|
" \"orphan\": " + AUTH_ORPHAN + "\n" +
|
||||||
" }\n" +
|
" }\n" +
|
||||||
"}";
|
"}";
|
||||||
|
|
||||||
@ -104,8 +114,16 @@ public class AuthResponseTest {
|
|||||||
assertThat("Incorrect auth client token", data.getClientToken(), is(AUTH_CLIENT_TOKEN));
|
assertThat("Incorrect auth client token", data.getClientToken(), is(AUTH_CLIENT_TOKEN));
|
||||||
assertThat("Incorrect auth lease duration", data.getLeaseDuration(), is(AUTH_LEASE_DURATION));
|
assertThat("Incorrect auth lease duration", data.getLeaseDuration(), is(AUTH_LEASE_DURATION));
|
||||||
assertThat("Incorrect auth renewable flag", data.isRenewable(), is(AUTH_RENEWABLE));
|
assertThat("Incorrect auth renewable flag", data.isRenewable(), is(AUTH_RENEWABLE));
|
||||||
|
assertThat("Incorrect auth orphan flag", data.isOrphan(), is(AUTH_ORPHAN));
|
||||||
|
assertThat("Incorrect auth token type", data.getTokenType(), is(AUTH_TOKEN_TYPE));
|
||||||
|
assertThat("Incorrect auth entity id", data.getEntityId(), is(AUTH_ENTITY_ID));
|
||||||
assertThat("Incorrect number of policies", data.getPolicies(), hasSize(2));
|
assertThat("Incorrect number of policies", data.getPolicies(), hasSize(2));
|
||||||
assertThat("Incorrect auth policies", data.getPolicies(), containsInAnyOrder(AUTH_POLICY_1, AUTH_POLICY_2));
|
assertThat("Incorrect auth policies", data.getPolicies(), containsInRelativeOrder(AUTH_POLICY_1, AUTH_POLICY_2));
|
||||||
|
assertThat("Incorrect number of token policies", data.getTokenPolicies(), hasSize(2));
|
||||||
|
assertThat("Incorrect token policies", data.getTokenPolicies(), containsInRelativeOrder(AUTH_POLICY_2, AUTH_POLICY_1));
|
||||||
|
assertThat("Incorrect auth metadata size", data.getMetadata().entrySet(), hasSize(1));
|
||||||
|
assertThat("Incorrect auth metadata", data.getMetadata().get(AUTH_META_KEY), is(AUTH_META_VALUE));
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
fail("AuthResponse deserialization failed: " + e.getMessage());
|
fail("AuthResponse deserialization failed: " + e.getMessage());
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user