modify according jrperritt's suggestion
diff --git a/openstack/identity/v2/tokens/requests.go b/openstack/identity/v2/tokens/requests.go
index 193847b..aa8b77f 100644
--- a/openstack/identity/v2/tokens/requests.go
+++ b/openstack/identity/v2/tokens/requests.go
@@ -91,12 +91,12 @@
 
 // Validates and retrieves information for user's token.
 func Get(client *gophercloud.ServiceClient, token string) GetResult {
-    var result GetResult
-    _, result.Err = client.Get(CreateGetURL(client, token), &result.Body, &gophercloud.RequestOpts{
-        OkCodes: []int{200, 203},
-    })
-    if result.Err != nil {
-        return result
-    }
-    return result
-}
\ No newline at end of file
+	var result GetResult
+	_, result.Err = client.Get(GetURL(client, token), &result.Body, &gophercloud.RequestOpts{
+		OkCodes: []int{200, 203},
+	})
+	if result.Err != nil {
+		return result
+	}
+	return result
+}
diff --git a/openstack/identity/v2/tokens/results.go b/openstack/identity/v2/tokens/results.go
index dc09357..3903e39 100644
--- a/openstack/identity/v2/tokens/results.go
+++ b/openstack/identity/v2/tokens/results.go
@@ -23,6 +23,10 @@
 
 	// Tenant provides information about the tenant to which this token grants access.
 	Tenant tenants.Tenant
+
+	// the owner user of token
+	UserName string
+	UserID   string
 }
 
 // Endpoint represents a single API endpoint offered by a service.
@@ -76,7 +80,7 @@
 
 // GetResult is the deferred response from a Get call.
 type GetResult struct {
-    gophercloud.Result
+	gophercloud.Result
 }
 
 // ExtractToken returns the just-created Token from a CreateResult.
@@ -136,3 +140,40 @@
 func createErr(err error) CreateResult {
 	return CreateResult{gophercloud.Result{Err: err}}
 }
+
+// ExtractToken returns the Token from a GetResult.
+func (result GetResult) ExtractToken() (*Token, error) {
+	if result.Err != nil {
+		return nil, result.Err
+	}
+
+	var response struct {
+		Access struct {
+			Token struct {
+				Expires string `mapstructure:"expires"`
+				ID      string `mapstructure:"id"`
+			} `mapstructure:"token"`
+			User struct {
+				ID   string `mapstructure:"id"`
+				Name string `mapstructure:"name"`
+			} `mapstructure:"user"`
+		} `mapstructure:"access"`
+	}
+
+	err := mapstructure.Decode(result.Body, &response)
+	if err != nil {
+		return nil, err
+	}
+
+	expiresTs, err := time.Parse(gophercloud.RFC3339Milli, response.Access.Token.Expires)
+	if err != nil {
+		return nil, err
+	}
+
+	return &Token{
+		ID:        response.Access.Token.ID,
+		ExpiresAt: expiresTs,
+		UserID:    response.Access.User.ID,
+		UserName:  response.Access.User.Name,
+	}, nil
+}
diff --git a/openstack/identity/v2/tokens/urls.go b/openstack/identity/v2/tokens/urls.go
index 0bc51de..ee13932 100644
--- a/openstack/identity/v2/tokens/urls.go
+++ b/openstack/identity/v2/tokens/urls.go
@@ -7,7 +7,7 @@
 	return client.ServiceURL("tokens")
 }
 
-// CreateGetURL generates the URL used to Validate Tokens.
-func CreateGetURL(client *gophercloud.ServiceClient, token string) string {
-    return client.ServiceURL("tokens", token)
-}
\ No newline at end of file
+// GetURL generates the URL used to Validate Tokens.
+func GetURL(client *gophercloud.ServiceClient, token string) string {
+	return client.ServiceURL("tokens", token)
+}