fix(auth/credentials): error on bad file name if explicitly set (#10018)

Only want our fall-through logic to work for ADC specified behaviour, not explicit credential options.

Fixes: #9809
diff --git a/auth/credentials/detect.go b/auth/credentials/detect.go
index 5723ae9..cb3f44f 100644
--- a/auth/credentials/detect.go
+++ b/auth/credentials/detect.go
@@ -76,7 +76,10 @@
 	if opts.CredentialsJSON != nil {
 		return readCredentialsFileJSON(opts.CredentialsJSON, opts)
 	}
-	if filename := credsfile.GetFileNameFromEnv(opts.CredentialsFile); filename != "" {
+	if opts.CredentialsFile != "" {
+		return readCredentialsFile(opts.CredentialsFile, opts)
+	}
+	if filename := os.Getenv(credsfile.GoogleAppCredsEnvVar); filename != "" {
 		if creds, err := readCredentialsFile(filename, opts); err == nil {
 			return creds, err
 		}
diff --git a/auth/credentials/detect_test.go b/auth/credentials/detect_test.go
index 8219a9b..9566137 100644
--- a/auth/credentials/detect_test.go
+++ b/auth/credentials/detect_test.go
@@ -688,6 +688,15 @@
 	}
 }
 
+func TestDefaultCredentials_BadFileName(t *testing.T) {
+	if _, err := DetectDefault(&DetectOptions{
+		CredentialsFile: "a/bad/filepath",
+		Scopes:          []string{"https://www.googleapis.com/auth/cloud-platform"},
+	}); err == nil {
+		t.Fatal("got nil, want non-nil err")
+	}
+}
+
 func TestDefaultCredentials_Validate(t *testing.T) {
 	tests := []struct {
 		name string