Skip to content

Commit 1ce08e1

Browse files
Updating AWS Identity Store APIs to support Attribute Extensions capability, with the first release adding Enterprise Attributes. This launch aligns Identity Store APIs with SCIM for enterprise attributes, reducing cases when customers are forced to use SCIM due to lack of SigV4 API support.
1 parent dd0670c commit 1ce08e1

15 files changed

+284
-19
lines changed

generator/ServiceModels/identitystore/identitystore-2020-06-15.api.json

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -494,7 +494,8 @@
494494
"Timezone":{"shape":"SensitiveStringType"},
495495
"Photos":{"shape":"Photos"},
496496
"Website":{"shape":"SensitiveStringType"},
497-
"Birthdate":{"shape":"SensitiveStringType"}
497+
"Birthdate":{"shape":"SensitiveStringType"},
498+
"Extensions":{"shape":"Extensions"}
498499
}
499500
},
500501
"CreateUserResponse":{
@@ -621,7 +622,8 @@
621622
],
622623
"members":{
623624
"IdentityStoreId":{"shape":"IdentityStoreId"},
624-
"UserId":{"shape":"ResourceId"}
625+
"UserId":{"shape":"ResourceId"},
626+
"Extensions":{"shape":"ExtensionNames"}
625627
}
626628
},
627629
"DescribeUserResponse":{
@@ -654,7 +656,8 @@
654656
"CreatedAt":{"shape":"DateType"},
655657
"CreatedBy":{"shape":"StringType"},
656658
"UpdatedAt":{"shape":"DateType"},
657-
"UpdatedBy":{"shape":"StringType"}
659+
"UpdatedBy":{"shape":"StringType"},
660+
"Extensions":{"shape":"Extensions"}
658661
}
659662
},
660663
"Email":{
@@ -672,6 +675,25 @@
672675
"min":1
673676
},
674677
"ExceptionMessage":{"type":"string"},
678+
"ExtensionName":{
679+
"type":"string",
680+
"max":50,
681+
"min":1,
682+
"pattern":"aws:identitystore:[a-z]{1,20}"
683+
},
684+
"ExtensionNames":{
685+
"type":"list",
686+
"member":{"shape":"ExtensionName"},
687+
"max":10,
688+
"min":1
689+
},
690+
"Extensions":{
691+
"type":"map",
692+
"key":{"shape":"ExtensionName"},
693+
"value":{"shape":"AttributeValue"},
694+
"max":10,
695+
"min":1
696+
},
675697
"ExternalId":{
676698
"type":"structure",
677699
"required":[
@@ -968,6 +990,7 @@
968990
"required":["IdentityStoreId"],
969991
"members":{
970992
"IdentityStoreId":{"shape":"IdentityStoreId"},
993+
"Extensions":{"shape":"ExtensionNames"},
971994
"MaxResults":{
972995
"shape":"MaxResults",
973996
"box":true
@@ -1081,7 +1104,8 @@
10811104
"GROUP",
10821105
"USER",
10831106
"IDENTITY_STORE",
1084-
"GROUP_MEMBERSHIP"
1107+
"GROUP_MEMBERSHIP",
1108+
"RESOURCE_POLICY"
10851109
]
10861110
},
10871111
"RetryAfterSeconds":{"type":"integer"},
@@ -1195,7 +1219,8 @@
11951219
"CreatedAt":{"shape":"DateType"},
11961220
"CreatedBy":{"shape":"StringType"},
11971221
"UpdatedAt":{"shape":"DateType"},
1198-
"UpdatedBy":{"shape":"StringType"}
1222+
"UpdatedBy":{"shape":"StringType"},
1223+
"Extensions":{"shape":"Extensions"}
11991224
}
12001225
},
12011226
"UserName":{

generator/ServiceModels/identitystore/identitystore-2020-06-15.docs.json

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
"base": "<p>The value of the attribute. This is a <code>Document</code> type. This type is not supported by Java V1, Go V1, and older versions of the CLI.</p>",
8080
"refs": {
8181
"AttributeOperation$AttributeValue": "<p>The value of the attribute. This is a <code>Document</code> type. This type is not supported by Java V1, Go V1, and older versions of the CLI.</p>",
82+
"Extensions$value": null,
8283
"UniqueAttribute$AttributeValue": "<p>The value of the attribute. This is a <code>Document</code> type. This type is not supported by Java V1, Go V1, and older versions of the CLI.</p>"
8384
}
8485
},
@@ -89,7 +90,7 @@
8990
"ConflictExceptionReason": {
9091
"base": null,
9192
"refs": {
92-
"ConflictException$Reason": "<p>This request cannot be completed for one of the following reasons:</p> <ul> <li> <p>Performing the requested operation would violate an existing uniqueness claim in the identity store. Resolve the conflict before retrying this request.</p> </li> <li> <p>The requested resource was being concurrently modified by another request.</p> </li> </ul>"
93+
"ConflictException$Reason": "<p>Indicates the reason for a conflict error when the service is unable to access a Customer Managed KMS key. For non-KMS permission errors, this field is not included.</p>"
9394
}
9495
},
9596
"CreateGroupMembershipRequest": {
@@ -207,6 +208,28 @@
207208
"ValidationException$Message": null
208209
}
209210
},
211+
"ExtensionName": {
212+
"base": null,
213+
"refs": {
214+
"ExtensionNames$member": null,
215+
"Extensions$key": null
216+
}
217+
},
218+
"ExtensionNames": {
219+
"base": null,
220+
"refs": {
221+
"DescribeUserRequest$Extensions": "<p>A collection of extension names indicating what extensions the service should retrieve alongside other user attributes. <code>aws:identitystore:enterprise</code> is the only supported extension name.</p>",
222+
"ListUsersRequest$Extensions": "<p>A collection of extension names indicating what extensions the service should retrieve alongside other user attributes. <code>aws:identitystore:enterprise</code> is the only supported extension name.</p>"
223+
}
224+
},
225+
"Extensions": {
226+
"base": null,
227+
"refs": {
228+
"CreateUserRequest$Extensions": "<p>A map with additional attribute extensions for the user. Each map key corresponds to an extension name, while map values represent extension data in <code>Document</code> type (not supported by Java V1, Go V1 and older versions of the CLI). <code>aws:identitystore:enterprise</code> is the only supported extension name.</p>",
229+
"DescribeUserResponse$Extensions": "<p>A map of explicitly requested attribute extensions associated with the user. Not populated if the user has no requested extensions.</p>",
230+
"User$Extensions": "<p>A map of explicitly requested attribute extensions associated with the user. Not populated if the user has no requested extensions.</p>"
231+
}
232+
},
210233
"ExternalId": {
211234
"base": "<p>The identifier issued to this resource by an external identity provider.</p>",
212235
"refs": {

generator/ServiceModels/identitystore/identitystore-2020-06-15.normal.json

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@
490490
},
491491
"Reason":{
492492
"shape":"ConflictExceptionReason",
493-
"documentation":"<p>This request cannot be completed for one of the following reasons:</p> <ul> <li> <p>Performing the requested operation would violate an existing uniqueness claim in the identity store. Resolve the conflict before retrying this request.</p> </li> <li> <p>The requested resource was being concurrently modified by another request.</p> </li> </ul>"
493+
"documentation":"<p>Indicates the reason for a conflict error when the service is unable to access a Customer Managed KMS key. For non-KMS permission errors, this field is not included.</p>"
494494
}
495495
},
496496
"documentation":"<p>This request cannot be completed for one of the following reasons:</p> <ul> <li> <p>Performing the requested operation would violate an existing uniqueness claim in the identity store. Resolve the conflict before retrying this request.</p> </li> <li> <p>The requested resource was being concurrently modified by another request.</p> </li> </ul>",
@@ -648,6 +648,10 @@
648648
"Birthdate":{
649649
"shape":"SensitiveStringType",
650650
"documentation":"<p>The user's birthdate in YYYY-MM-DD format. This field supports standard date format for storing personal information.</p>"
651+
},
652+
"Extensions":{
653+
"shape":"Extensions",
654+
"documentation":"<p>A map with additional attribute extensions for the user. Each map key corresponds to an extension name, while map values represent extension data in <code>Document</code> type (not supported by Java V1, Go V1 and older versions of the CLI). <code>aws:identitystore:enterprise</code> is the only supported extension name.</p>"
651655
}
652656
}
653657
},
@@ -865,6 +869,10 @@
865869
"UserId":{
866870
"shape":"ResourceId",
867871
"documentation":"<p>The identifier for a user in the identity store.</p>"
872+
},
873+
"Extensions":{
874+
"shape":"ExtensionNames",
875+
"documentation":"<p>A collection of extension names indicating what extensions the service should retrieve alongside other user attributes. <code>aws:identitystore:enterprise</code> is the only supported extension name.</p>"
868876
}
869877
}
870878
},
@@ -970,6 +978,10 @@
970978
"UpdatedBy":{
971979
"shape":"StringType",
972980
"documentation":"<p>The identifier of the user or system that last updated the user.</p>"
981+
},
982+
"Extensions":{
983+
"shape":"Extensions",
984+
"documentation":"<p>A map of explicitly requested attribute extensions associated with the user. Not populated if the user has no requested extensions.</p>"
973985
}
974986
}
975987
},
@@ -998,6 +1010,25 @@
9981010
"min":1
9991011
},
10001012
"ExceptionMessage":{"type":"string"},
1013+
"ExtensionName":{
1014+
"type":"string",
1015+
"max":50,
1016+
"min":1,
1017+
"pattern":"aws:identitystore:[a-z]{1,20}"
1018+
},
1019+
"ExtensionNames":{
1020+
"type":"list",
1021+
"member":{"shape":"ExtensionName"},
1022+
"max":10,
1023+
"min":1
1024+
},
1025+
"Extensions":{
1026+
"type":"map",
1027+
"key":{"shape":"ExtensionName"},
1028+
"value":{"shape":"AttributeValue"},
1029+
"max":10,
1030+
"min":1
1031+
},
10011032
"ExternalId":{
10021033
"type":"structure",
10031034
"required":[
@@ -1478,6 +1509,10 @@
14781509
"shape":"IdentityStoreId",
14791510
"documentation":"<p>The globally unique identifier for the identity store, such as <code>d-1234567890</code>. In this example, <code>d-</code> is a fixed prefix, and <code>1234567890</code> is a randomly generated string that contains numbers and lower case letters. This value is generated at the time that a new identity store is created.</p>"
14801511
},
1512+
"Extensions":{
1513+
"shape":"ExtensionNames",
1514+
"documentation":"<p>A collection of extension names indicating what extensions the service should retrieve alongside other user attributes. <code>aws:identitystore:enterprise</code> is the only supported extension name.</p>"
1515+
},
14811516
"MaxResults":{
14821517
"shape":"MaxResults",
14831518
"documentation":"<p>The maximum number of results to be returned per request. This parameter is used in the <code> ListUsers</code> and <code>ListGroups</code> requests to specify how many results to return in one page. The length limit is 50 characters.</p>",
@@ -1661,7 +1696,8 @@
16611696
"GROUP",
16621697
"USER",
16631698
"IDENTITY_STORE",
1664-
"GROUP_MEMBERSHIP"
1699+
"GROUP_MEMBERSHIP",
1700+
"RESOURCE_POLICY"
16651701
]
16661702
},
16671703
"RetryAfterSeconds":{"type":"integer"},
@@ -1886,6 +1922,10 @@
18861922
"UpdatedBy":{
18871923
"shape":"StringType",
18881924
"documentation":"<p>The identifier of the user or system that last updated the user.</p>"
1925+
},
1926+
"Extensions":{
1927+
"shape":"Extensions",
1928+
"documentation":"<p>A map of explicitly requested attribute extensions associated with the user. Not populated if the user has no requested extensions.</p>"
18891929
}
18901930
},
18911931
"documentation":"<p>A user object that contains the metadata and attributes for a specified user.</p>"

sdk/src/Services/IdentityStore/Generated/Model/ConflictException.cs

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -135,18 +135,9 @@ public override void GetObjectData(System.Runtime.Serialization.SerializationInf
135135
/// <summary>
136136
/// Gets and sets the property Reason.
137137
/// <para>
138-
/// This request cannot be completed for one of the following reasons:
138+
/// Indicates the reason for a conflict error when the service is unable to access a Customer
139+
/// Managed KMS key. For non-KMS permission errors, this field is not included.
139140
/// </para>
140-
/// <ul> <li>
141-
/// <para>
142-
/// Performing the requested operation would violate an existing uniqueness claim in the
143-
/// identity store. Resolve the conflict before retrying this request.
144-
/// </para>
145-
/// </li> <li>
146-
/// <para>
147-
/// The requested resource was being concurrently modified by another request.
148-
/// </para>
149-
/// </li> </ul>
150141
/// </summary>
151142
public ConflictExceptionReason Reason
152143
{

sdk/src/Services/IdentityStore/Generated/Model/CreateUserRequest.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public partial class CreateUserRequest : AmazonIdentityStoreRequest
3939
private string _birthdate;
4040
private string _displayName;
4141
private List<Email> _emails = AWSConfigs.InitializeCollections ? new List<Email>() : null;
42+
private Dictionary<string, Amazon.Runtime.Documents.Document> _extensions = AWSConfigs.InitializeCollections ? new Dictionary<string, Amazon.Runtime.Documents.Document>() : null;
4243
private string _identityStoreId;
4344
private string _locale;
4445
private Name _name;
@@ -142,6 +143,33 @@ internal bool IsSetEmails()
142143
return this._emails != null && (this._emails.Count > 0 || !AWSConfigs.InitializeCollections);
143144
}
144145

146+
/// <summary>
147+
/// Gets and sets the property Extensions.
148+
/// <para>
149+
/// A map with additional attribute extensions for the user. Each map key corresponds
150+
/// to an extension name, while map values represent extension data in <c>Document</c>
151+
/// type (not supported by Java V1, Go V1 and older versions of the CLI). <c>aws:identitystore:enterprise</c>
152+
/// is the only supported extension name.
153+
/// </para>
154+
/// <para />
155+
/// Starting with version 4 of the SDK this property will default to null. If no data for this property is returned
156+
/// from the service the property will also be null. This was changed to improve performance and allow the SDK and caller
157+
/// to distinguish between a property not set or a property being empty to clear out a value. To retain the previous
158+
/// SDK behavior set the AWSConfigs.InitializeCollections static property to true.
159+
/// </summary>
160+
[AWSProperty(Min=1, Max=10)]
161+
public Dictionary<string, Amazon.Runtime.Documents.Document> Extensions
162+
{
163+
get { return this._extensions; }
164+
set { this._extensions = value; }
165+
}
166+
167+
// Check to see if Extensions property is set
168+
internal bool IsSetExtensions()
169+
{
170+
return this._extensions != null && (this._extensions.Count > 0 || !AWSConfigs.InitializeCollections);
171+
}
172+
145173
/// <summary>
146174
/// Gets and sets the property IdentityStoreId.
147175
/// <para>

sdk/src/Services/IdentityStore/Generated/Model/DescribeUserRequest.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,36 @@ namespace Amazon.IdentityStore.Model
4444
/// </summary>
4545
public partial class DescribeUserRequest : AmazonIdentityStoreRequest
4646
{
47+
private List<string> _extensions = AWSConfigs.InitializeCollections ? new List<string>() : null;
4748
private string _identityStoreId;
4849
private string _userId;
4950

51+
/// <summary>
52+
/// Gets and sets the property Extensions.
53+
/// <para>
54+
/// A collection of extension names indicating what extensions the service should retrieve
55+
/// alongside other user attributes. <c>aws:identitystore:enterprise</c> is the only supported
56+
/// extension name.
57+
/// </para>
58+
/// <para />
59+
/// Starting with version 4 of the SDK this property will default to null. If no data for this property is returned
60+
/// from the service the property will also be null. This was changed to improve performance and allow the SDK and caller
61+
/// to distinguish between a property not set or a property being empty to clear out a value. To retain the previous
62+
/// SDK behavior set the AWSConfigs.InitializeCollections static property to true.
63+
/// </summary>
64+
[AWSProperty(Min=1, Max=10)]
65+
public List<string> Extensions
66+
{
67+
get { return this._extensions; }
68+
set { this._extensions = value; }
69+
}
70+
71+
// Check to see if Extensions property is set
72+
internal bool IsSetExtensions()
73+
{
74+
return this._extensions != null && (this._extensions.Count > 0 || !AWSConfigs.InitializeCollections);
75+
}
76+
5077
/// <summary>
5178
/// Gets and sets the property IdentityStoreId.
5279
/// <para>

sdk/src/Services/IdentityStore/Generated/Model/DescribeUserResponse.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public partial class DescribeUserResponse : AmazonWebServiceResponse
4040
private string _createdBy;
4141
private string _displayName;
4242
private List<Email> _emails = AWSConfigs.InitializeCollections ? new List<Email>() : null;
43+
private Dictionary<string, Amazon.Runtime.Documents.Document> _extensions = AWSConfigs.InitializeCollections ? new Dictionary<string, Amazon.Runtime.Documents.Document>() : null;
4344
private List<ExternalId> _externalIds = AWSConfigs.InitializeCollections ? new List<ExternalId>() : null;
4445
private string _identityStoreId;
4546
private string _locale;
@@ -182,6 +183,31 @@ internal bool IsSetEmails()
182183
return this._emails != null && (this._emails.Count > 0 || !AWSConfigs.InitializeCollections);
183184
}
184185

186+
/// <summary>
187+
/// Gets and sets the property Extensions.
188+
/// <para>
189+
/// A map of explicitly requested attribute extensions associated with the user. Not populated
190+
/// if the user has no requested extensions.
191+
/// </para>
192+
/// <para />
193+
/// Starting with version 4 of the SDK this property will default to null. If no data for this property is returned
194+
/// from the service the property will also be null. This was changed to improve performance and allow the SDK and caller
195+
/// to distinguish between a property not set or a property being empty to clear out a value. To retain the previous
196+
/// SDK behavior set the AWSConfigs.InitializeCollections static property to true.
197+
/// </summary>
198+
[AWSProperty(Min=1, Max=10)]
199+
public Dictionary<string, Amazon.Runtime.Documents.Document> Extensions
200+
{
201+
get { return this._extensions; }
202+
set { this._extensions = value; }
203+
}
204+
205+
// Check to see if Extensions property is set
206+
internal bool IsSetExtensions()
207+
{
208+
return this._extensions != null && (this._extensions.Count > 0 || !AWSConfigs.InitializeCollections);
209+
}
210+
185211
/// <summary>
186212
/// Gets and sets the property ExternalIds.
187213
/// <para>

sdk/src/Services/IdentityStore/Generated/Model/Internal/MarshallTransformations/CreateUserRequestMarshaller.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,20 @@ public IRequest Marshall(CreateUserRequest publicRequest)
119119
context.Writer.WriteEndArray();
120120
}
121121

122+
if(publicRequest.IsSetExtensions())
123+
{
124+
context.Writer.WritePropertyName("Extensions");
125+
context.Writer.WriteStartObject();
126+
foreach (var publicRequestExtensionsKvp in publicRequest.Extensions)
127+
{
128+
context.Writer.WritePropertyName(publicRequestExtensionsKvp.Key);
129+
var publicRequestExtensionsValue = publicRequestExtensionsKvp.Value;
130+
131+
Amazon.Runtime.Documents.Internal.Transform.DocumentMarshaller.Instance.Write(context.Writer, publicRequestExtensionsValue);
132+
}
133+
context.Writer.WriteEndObject();
134+
}
135+
122136
if(publicRequest.IsSetIdentityStoreId())
123137
{
124138
context.Writer.WritePropertyName("IdentityStoreId");

0 commit comments

Comments
 (0)