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
 }
diff --git a/openstack/identity/v3/tokens/requests_test.go b/openstack/identity/v3/tokens/requests_test.go
index 3ac49cd..6038f96 100644
--- a/openstack/identity/v3/tokens/requests_test.go
+++ b/openstack/identity/v3/tokens/requests_test.go
@@ -26,6 +26,7 @@
 		testhelper.TestHeader(t, r, "Accept", "application/json")
 		testhelper.TestJSONRequest(t, r, requestJSON)
 
+		w.WriteHeader(http.StatusCreated)
 		fmt.Fprintf(w, `{}`)
 	})
 
@@ -234,6 +235,33 @@
 	`)
 }
 
+func TestCreateExtractsTokenFromResponse(t *testing.T) {
+	setup()
+	defer teardown()
+
+	client := gophercloud.ServiceClient{
+		Endpoint: endpoint(),
+		Options:  gophercloud.AuthOptions{UserID: "me", Password: "shhh"},
+	}
+
+	mux.HandleFunc("/auth/tokens", func(w http.ResponseWriter, r *http.Request) {
+		w.Header().Add("X-Subject-Token", "aaa111")
+
+		w.WriteHeader(http.StatusCreated)
+		fmt.Fprintf(w, `{}`)
+	})
+
+	result, err := Create(&client, nil)
+	if err != nil {
+		t.Errorf("Create returned an error: %v", err)
+	}
+
+	token, _ := result.TokenID()
+	if token != "aaa111" {
+		t.Errorf("Expected token to be aaa111, but was %s", token)
+	}
+}
+
 func TestCreateFailureEmptyAuth(t *testing.T) {
 	authTokenPostErr(t, gophercloud.AuthOptions{}, nil, false, ErrMissingPassword)
 }
diff --git a/openstack/identity/v3/tokens/results.go b/openstack/identity/v3/tokens/results.go
index ca727c3..0f44744 100644
--- a/openstack/identity/v3/tokens/results.go
+++ b/openstack/identity/v3/tokens/results.go
@@ -1,9 +1,12 @@
 package tokens
 
 // TokenCreateResult contains the document structure returned from a Create call.
-type TokenCreateResult map[string]interface{}
+type TokenCreateResult struct {
+	response map[string]interface{}
+	tokenID  string
+}
 
 // TokenID retrieves a token generated by a Create call from an token creation response.
-func (r TokenCreateResult) TokenID() (string, error) {
-	return "", nil
+func (r *TokenCreateResult) TokenID() (string, error) {
+	return r.tokenID, nil
 }
diff --git a/openstack/identity/v3/tokens/results_test.go b/openstack/identity/v3/tokens/results_test.go
new file mode 100644
index 0000000..ca0d563
--- /dev/null
+++ b/openstack/identity/v3/tokens/results_test.go
@@ -0,0 +1,12 @@
+package tokens
+
+import "testing"
+
+func TestTokenID(t *testing.T) {
+	result := TokenCreateResult{tokenID: "1234"}
+
+	token, _ := result.TokenID()
+	if token != "1234" {
+		t.Errorf("Expected tokenID of 1234, got %s", token)
+	}
+}
