Skip to content

Commit e9030f0

Browse files
authored
Merge pull request #677 from Azure/dev
huangpf PR: dev <- Azure:dev
2 parents 416c269 + 4cc130d commit e9030f0

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

src/ResourceManager/KeyVault/Commands.KeyVault/Models/KeyVaultManagementCmdletBase.cs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
using System.Collections;
2525
using System.Collections.Generic;
2626
using System.Linq;
27+
using System.Linq.Expressions;
2728
using System.Threading.Tasks;
2829
using PSKeyVaultModels = Microsoft.Azure.Commands.KeyVault.Models;
2930
using PSKeyVaultProperties = Microsoft.Azure.Commands.KeyVault.Properties;
@@ -193,17 +194,15 @@ protected string GetObjectId(string objectId, string upn, string spn)
193194
if (!string.IsNullOrWhiteSpace(upn))
194195
{
195196
objectFilter = upn;
196-
var user = ActiveDirectoryClient.Users.Where(u =>
197-
u.UserPrincipalName.Equals(upn) || u.Mail.Equals(upn) || u.OtherMails.Any(m => m.Equals(upn))).
198-
ExecuteAsync().GetAwaiter().GetResult().CurrentPage.FirstOrDefault();
197+
var user = ActiveDirectoryClient.Users.Where(FilterByUpn(upn)).ExecuteAsync().GetAwaiter().GetResult().CurrentPage.FirstOrDefault();
199198
if (user != null)
200199
objId = user.ObjectId;
201200
}
202201
else if (!string.IsNullOrWhiteSpace(spn))
203202
{
204203
objectFilter = spn;
205204
var servicePrincipal = ActiveDirectoryClient.ServicePrincipals.Where(s =>
206-
s.ServicePrincipalNames.Any(n => n.Equals(spn)))
205+
s.ServicePrincipalNames.Any(n => n.Equals(spn, StringComparison.OrdinalIgnoreCase)))
207206
.ExecuteAsync().GetAwaiter().GetResult().CurrentPage.FirstOrDefault();
208207
if (servicePrincipal != null)
209208
objId = servicePrincipal.ObjectId;
@@ -246,6 +245,19 @@ protected bool IsValidObjectIdSyntax(string objectId)
246245
return Guid.TryParse(objectId, out dummyValue);
247246
}
248247

248+
private Expression<Func<IUser, bool>> FilterByUpn(string upn)
249+
{
250+
// In ADFS, Graph cannot handle this particular combination of filters.
251+
if (!DefaultProfile.Context.Environment.OnPremise)
252+
{
253+
return u => u.UserPrincipalName.Equals(upn, StringComparison.OrdinalIgnoreCase) ||
254+
u.Mail.Equals(upn, StringComparison.OrdinalIgnoreCase) ||
255+
u.OtherMails.Any(m => m.Equals(upn, StringComparison.OrdinalIgnoreCase));
256+
}
257+
258+
return u => u.UserPrincipalName.Equals(upn, StringComparison.OrdinalIgnoreCase);
259+
}
260+
249261
protected readonly string[] DefaultPermissionsToKeys =
250262
{
251263
"get",

0 commit comments

Comments
 (0)