dsl struct tags; wip
diff --git a/authv2.go b/authv2.go
new file mode 100644
index 0000000..6eed8af
--- /dev/null
+++ b/authv2.go
@@ -0,0 +1,33 @@
+package gophercloud
+
+type PasswordCredentialsV2 struct {
+ Username string `json:"username" required:"true"`
+ Password string `json:"password" required:"true"`
+}
+
+type TokenCredentialsV2 struct {
+ ID string `json:"id,omitempty" required:"true"`
+}
+
+// AuthOptions wraps a gophercloud AuthOptions in order to adhere to the AuthOptionsBuilder
+// interface.
+type AuthOptionsV2 struct {
+ PasswordCredentials *PasswordCredentialsV2 `json:"passwordCredentials,omitempty" xor:"TokenCredentials"`
+
+ // The TenantID and TenantName fields are optional for the Identity V2 API.
+ // Some providers allow you to specify a TenantName instead of the TenantId.
+ // Some require both. Your provider's authentication policies will determine
+ // how these fields influence authentication.
+ TenantID string `json:"tenantId,omitempty"`
+ TenantName string `json:"tenantName,omitempty"`
+
+ // TokenCredentials allows users to authenticate (possibly as another user) with an
+ // authentication token ID.
+ TokenCredentials *TokenCredentialsV2 `json:"token,omitempty" xor:"PasswordCredentials"`
+}
+
+// ToTokenV2CreateMap allows AuthOptionsV2 to satisfy the AuthOptionsBuilder
+// interface in the v2 tokens package
+func (opts AuthOptionsV2) ToTokenV2CreateMap() (map[string]interface{}, error) {
+ return BuildRequestBody(opts, "auth")
+}