mirror of
https://github.com/optim-enterprises-bv/vault.git
synced 2025-11-01 19:17:58 +00:00
Introduced AccessorID in TokenEntry and returning it along with token
This commit is contained in:
@@ -28,6 +28,7 @@ type Secret struct {
|
|||||||
// SecretAuth is the structure containing auth information if we have it.
|
// SecretAuth is the structure containing auth information if we have it.
|
||||||
type SecretAuth struct {
|
type SecretAuth struct {
|
||||||
ClientToken string `json:"client_token"`
|
ClientToken string `json:"client_token"`
|
||||||
|
AccessorID string `json:"accessor_id"`
|
||||||
Policies []string `json:"policies"`
|
Policies []string `json:"policies"`
|
||||||
Metadata map[string]string `json:"metadata"`
|
Metadata map[string]string `json:"metadata"`
|
||||||
|
|
||||||
|
|||||||
@@ -143,6 +143,7 @@ func (t TableFormatter) OutputSecret(ui cli.Ui, secret, s *api.Secret) error {
|
|||||||
|
|
||||||
if s.Auth != nil {
|
if s.Auth != nil {
|
||||||
input = append(input, fmt.Sprintf("token %s %s", config.Delim, s.Auth.ClientToken))
|
input = append(input, fmt.Sprintf("token %s %s", config.Delim, s.Auth.ClientToken))
|
||||||
|
input = append(input, fmt.Sprintf("token_accessor %s %s", config.Delim, s.Auth.AccessorID))
|
||||||
input = append(input, fmt.Sprintf("token_duration %s %d", config.Delim, s.Auth.LeaseDuration))
|
input = append(input, fmt.Sprintf("token_duration %s %d", config.Delim, s.Auth.LeaseDuration))
|
||||||
input = append(input, fmt.Sprintf("token_renewable %s %v", config.Delim, s.Auth.Renewable))
|
input = append(input, fmt.Sprintf("token_renewable %s %v", config.Delim, s.Auth.Renewable))
|
||||||
input = append(input, fmt.Sprintf("token_policies %s %v", config.Delim, s.Auth.Policies))
|
input = append(input, fmt.Sprintf("token_policies %s %v", config.Delim, s.Auth.Policies))
|
||||||
|
|||||||
@@ -124,6 +124,7 @@ func respondLogical(w http.ResponseWriter, r *http.Request, path string, dataOnl
|
|||||||
if resp.Auth != nil {
|
if resp.Auth != nil {
|
||||||
logicalResp.Auth = &Auth{
|
logicalResp.Auth = &Auth{
|
||||||
ClientToken: resp.Auth.ClientToken,
|
ClientToken: resp.Auth.ClientToken,
|
||||||
|
AccessorID: resp.Auth.AccessorID,
|
||||||
Policies: resp.Auth.Policies,
|
Policies: resp.Auth.Policies,
|
||||||
Metadata: resp.Auth.Metadata,
|
Metadata: resp.Auth.Metadata,
|
||||||
LeaseDuration: int(resp.Auth.TTL.Seconds()),
|
LeaseDuration: int(resp.Auth.TTL.Seconds()),
|
||||||
@@ -218,6 +219,7 @@ type LogicalResponse struct {
|
|||||||
|
|
||||||
type Auth struct {
|
type Auth struct {
|
||||||
ClientToken string `json:"client_token"`
|
ClientToken string `json:"client_token"`
|
||||||
|
AccessorID string `json:"accessor_id"`
|
||||||
Policies []string `json:"policies"`
|
Policies []string `json:"policies"`
|
||||||
Metadata map[string]string `json:"metadata"`
|
Metadata map[string]string `json:"metadata"`
|
||||||
LeaseDuration int `json:"lease_duration"`
|
LeaseDuration int `json:"lease_duration"`
|
||||||
|
|||||||
@@ -33,6 +33,13 @@ type Auth struct {
|
|||||||
// This will be filled in by Vault core when an auth structure is
|
// This will be filled in by Vault core when an auth structure is
|
||||||
// returned. Setting this manually will have no effect.
|
// returned. Setting this manually will have no effect.
|
||||||
ClientToken string
|
ClientToken string
|
||||||
|
|
||||||
|
// AccessorID is the identifier for the ClientToken. This can be used
|
||||||
|
// to perform management functionalities (especially revocation) when
|
||||||
|
// ClientToken in the audit logs are obfuscated. AccessorID can be used
|
||||||
|
// to revoke a ClientToken and to lookup the capabilities of the ClientToken,
|
||||||
|
// all without actually knowing the ClientToken.
|
||||||
|
AccessorID string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Auth) GoString() string {
|
func (a *Auth) GoString() string {
|
||||||
|
|||||||
@@ -264,6 +264,7 @@ func NewTokenStore(c *Core, config *logical.BackendConfig) (*TokenStore, error)
|
|||||||
// TokenEntry is used to represent a given token
|
// TokenEntry is used to represent a given token
|
||||||
type TokenEntry struct {
|
type TokenEntry struct {
|
||||||
ID string // ID of this entry, generally a random UUID
|
ID string // ID of this entry, generally a random UUID
|
||||||
|
AccessorID string // Accessor ID for this token, a random UUID
|
||||||
Parent string // Parent token, used for revocation trees
|
Parent string // Parent token, used for revocation trees
|
||||||
Policies []string // Which named policies should be used
|
Policies []string // Which named policies should be used
|
||||||
Path string // Used for audit trails, this is something like "auth/user/login"
|
Path string // Used for audit trails, this is something like "auth/user/login"
|
||||||
@@ -300,6 +301,19 @@ func (ts *TokenStore) rootToken() (*TokenEntry, error) {
|
|||||||
return te, nil
|
return te, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CreateAccessorID is used to create an identifier for the token ID.
|
||||||
|
func (ts *TokenStore) createAccessorID(entry *TokenEntry) error {
|
||||||
|
defer metrics.MeasureSince([]string{"token", "createAccessorID"}, time.Now())
|
||||||
|
|
||||||
|
// Create a random accessor ID
|
||||||
|
accessorUUID, err := uuid.GenerateUUID()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
entry.AccessorID = accessorUUID
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Create is used to create a new token entry. The entry is assigned
|
// Create is used to create a new token entry. The entry is assigned
|
||||||
// a newly generated ID if not provided.
|
// a newly generated ID if not provided.
|
||||||
func (ts *TokenStore) create(entry *TokenEntry) error {
|
func (ts *TokenStore) create(entry *TokenEntry) error {
|
||||||
@@ -313,6 +327,11 @@ func (ts *TokenStore) create(entry *TokenEntry) error {
|
|||||||
entry.ID = entryUUID
|
entry.ID = entryUUID
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err := ts.createAccessorID(entry)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
return ts.storeCommon(entry, true)
|
return ts.storeCommon(entry, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -705,6 +724,7 @@ func (ts *TokenStore) handleCreateCommon(
|
|||||||
Renewable: true,
|
Renewable: true,
|
||||||
},
|
},
|
||||||
ClientToken: te.ID,
|
ClientToken: te.ID,
|
||||||
|
AccessorID: te.AccessorID,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user