Extract the new token from headers.
diff --git a/openstack/identity/v3/tokens/requests.go b/openstack/identity/v3/tokens/requests.go
index 121de43..b8f0d76 100644
--- a/openstack/identity/v3/tokens/requests.go
+++ b/openstack/identity/v3/tokens/requests.go
@@ -228,11 +228,18 @@
 		}
 	}
 
-	var resp TokenCreateResult
-	perigee.Post(getTokenURL(c), perigee.Options{
+	var result TokenCreateResult
+	response, err := perigee.Request("POST", getTokenURL(c), perigee.Options{
 		ReqBody: &req,
-		Results: &resp,
+		Results: &result.response,
 		OkCodes: []int{201},
 	})
-	return &resp, nil
+	if err != nil {
+		return nil, err
+	}
+
+	// Extract the token ID from the response, if present.
+	result.tokenID = response.HttpResponse.Header.Get("X-Subject-Token")
+
+	return &result, nil
 }