Add Email claim (#18580)
This commit is contained in:
parent
e937884eb4
commit
1e4438647c
|
|
@ -15,6 +15,7 @@ namespace Microsoft.AspNetCore.Identity
|
||||||
public partial class ClaimsIdentityOptions
|
public partial class ClaimsIdentityOptions
|
||||||
{
|
{
|
||||||
public ClaimsIdentityOptions() { }
|
public ClaimsIdentityOptions() { }
|
||||||
|
public string EmailClaimType { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
public string RoleClaimType { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
public string RoleClaimType { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
public string SecurityStampClaimType { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
public string SecurityStampClaimType { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
public string UserIdClaimType { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
public string UserIdClaimType { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ namespace Microsoft.AspNetCore.Identity
|
||||||
public partial class ClaimsIdentityOptions
|
public partial class ClaimsIdentityOptions
|
||||||
{
|
{
|
||||||
public ClaimsIdentityOptions() { }
|
public ClaimsIdentityOptions() { }
|
||||||
|
public string EmailClaimType { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
public string RoleClaimType { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
public string RoleClaimType { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
public string SecurityStampClaimType { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
public string SecurityStampClaimType { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
public string UserIdClaimType { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
public string UserIdClaimType { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute] set { } }
|
||||||
|
|
|
||||||
|
|
@ -25,9 +25,14 @@ namespace Microsoft.AspNetCore.Identity
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string UserIdClaimType { get; set; } = ClaimTypes.NameIdentifier;
|
public string UserIdClaimType { get; set; } = ClaimTypes.NameIdentifier;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the ClaimType used for the user email claim. Defaults to <see cref="ClaimTypes.Email"/>.
|
||||||
|
/// </summary>
|
||||||
|
public string EmailClaimType { get; set; } = ClaimTypes.Email;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the ClaimType used for the security stamp claim. Defaults to "AspNet.Identity.SecurityStamp".
|
/// Gets or sets the ClaimType used for the security stamp claim. Defaults to "AspNet.Identity.SecurityStamp".
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string SecurityStampClaimType { get; set; } = "AspNet.Identity.SecurityStamp";
|
public string SecurityStampClaimType { get; set; } = "AspNet.Identity.SecurityStamp";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -81,6 +81,14 @@ namespace Microsoft.AspNetCore.Identity
|
||||||
Options.ClaimsIdentity.RoleClaimType);
|
Options.ClaimsIdentity.RoleClaimType);
|
||||||
id.AddClaim(new Claim(Options.ClaimsIdentity.UserIdClaimType, userId));
|
id.AddClaim(new Claim(Options.ClaimsIdentity.UserIdClaimType, userId));
|
||||||
id.AddClaim(new Claim(Options.ClaimsIdentity.UserNameClaimType, userName));
|
id.AddClaim(new Claim(Options.ClaimsIdentity.UserNameClaimType, userName));
|
||||||
|
if (UserManager.SupportsUserEmail)
|
||||||
|
{
|
||||||
|
var email = await UserManager.GetEmailAsync(user);
|
||||||
|
if (!string.IsNullOrEmpty(email))
|
||||||
|
{
|
||||||
|
id.AddClaim(new Claim(Options.ClaimsIdentity.EmailClaimType, email));
|
||||||
|
}
|
||||||
|
}
|
||||||
if (UserManager.SupportsUserSecurityStamp)
|
if (UserManager.SupportsUserSecurityStamp)
|
||||||
{
|
{
|
||||||
id.AddClaim(new Claim(Options.ClaimsIdentity.SecurityStampClaimType,
|
id.AddClaim(new Claim(Options.ClaimsIdentity.SecurityStampClaimType,
|
||||||
|
|
@ -154,4 +162,4 @@ namespace Microsoft.AspNetCore.Identity
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,22 +30,33 @@ namespace Microsoft.AspNetCore.Identity.Test
|
||||||
}
|
}
|
||||||
|
|
||||||
[Theory]
|
[Theory]
|
||||||
[InlineData(false, false, false)]
|
[InlineData(true, false, false, false)]
|
||||||
[InlineData(false, true, false)]
|
[InlineData(true, true, false, false)]
|
||||||
[InlineData(true, false, false)]
|
[InlineData(true, false, true, false)]
|
||||||
[InlineData(true, true, false)]
|
[InlineData(true, true, true, false)]
|
||||||
[InlineData(true, false, true)]
|
[InlineData(false, false, false, true)]
|
||||||
[InlineData(true, true, true)]
|
[InlineData(false, true, false, true)]
|
||||||
public async Task EnsureClaimsIdentityHasExpectedClaims(bool supportRoles, bool supportClaims, bool supportRoleClaims)
|
[InlineData(false, false, false, false)]
|
||||||
|
[InlineData(false, true, false, false)]
|
||||||
|
[InlineData(true, false, false, true)]
|
||||||
|
[InlineData(true, true, false, true)]
|
||||||
|
[InlineData(true, false, true, true)]
|
||||||
|
[InlineData(true, true, true, true)]
|
||||||
|
public async Task EnsureClaimsIdentityHasExpectedClaims(bool supportRoles, bool supportClaims, bool supportRoleClaims, bool supportsUserEmail)
|
||||||
{
|
{
|
||||||
// Setup
|
// Setup
|
||||||
var userManager = MockHelpers.MockUserManager<PocoUser>();
|
var userManager = MockHelpers.MockUserManager<PocoUser>();
|
||||||
var roleManager = MockHelpers.MockRoleManager<PocoRole>();
|
var roleManager = MockHelpers.MockRoleManager<PocoRole>();
|
||||||
var user = new PocoUser { UserName = "Foo" };
|
var user = new PocoUser { UserName = "Foo", Email = "foo@bar.com" };
|
||||||
userManager.Setup(m => m.SupportsUserClaim).Returns(supportClaims);
|
userManager.Setup(m => m.SupportsUserClaim).Returns(supportClaims);
|
||||||
userManager.Setup(m => m.SupportsUserRole).Returns(supportRoles);
|
userManager.Setup(m => m.SupportsUserRole).Returns(supportRoles);
|
||||||
|
userManager.Setup(m => m.SupportsUserEmail).Returns(supportsUserEmail);
|
||||||
userManager.Setup(m => m.GetUserIdAsync(user)).ReturnsAsync(user.Id);
|
userManager.Setup(m => m.GetUserIdAsync(user)).ReturnsAsync(user.Id);
|
||||||
userManager.Setup(m => m.GetUserNameAsync(user)).ReturnsAsync(user.UserName);
|
userManager.Setup(m => m.GetUserNameAsync(user)).ReturnsAsync(user.UserName);
|
||||||
|
if (supportsUserEmail)
|
||||||
|
{
|
||||||
|
userManager.Setup(m => m.GetEmailAsync(user)).ReturnsAsync(user.Email);
|
||||||
|
}
|
||||||
var roleClaims = new[] { "Admin", "Local" };
|
var roleClaims = new[] { "Admin", "Local" };
|
||||||
if (supportRoles)
|
if (supportRoles)
|
||||||
{
|
{
|
||||||
|
|
@ -90,6 +101,7 @@ namespace Microsoft.AspNetCore.Identity.Test
|
||||||
Assert.Contains(
|
Assert.Contains(
|
||||||
claims, c => c.Type == manager.Options.ClaimsIdentity.UserNameClaimType && c.Value == user.UserName);
|
claims, c => c.Type == manager.Options.ClaimsIdentity.UserNameClaimType && c.Value == user.UserName);
|
||||||
Assert.Contains(claims, c => c.Type == manager.Options.ClaimsIdentity.UserIdClaimType && c.Value == user.Id);
|
Assert.Contains(claims, c => c.Type == manager.Options.ClaimsIdentity.UserIdClaimType && c.Value == user.Id);
|
||||||
|
Assert.Equal(supportsUserEmail, claims.Any(c => c.Type == manager.Options.ClaimsIdentity.EmailClaimType && c.Value == user.Email));
|
||||||
Assert.Equal(supportRoles, claims.Any(c => c.Type == manager.Options.ClaimsIdentity.RoleClaimType && c.Value == "Admin"));
|
Assert.Equal(supportRoles, claims.Any(c => c.Type == manager.Options.ClaimsIdentity.RoleClaimType && c.Value == "Admin"));
|
||||||
Assert.Equal(supportRoles, claims.Any(c => c.Type == manager.Options.ClaimsIdentity.RoleClaimType && c.Value == "Local"));
|
Assert.Equal(supportRoles, claims.Any(c => c.Type == manager.Options.ClaimsIdentity.RoleClaimType && c.Value == "Local"));
|
||||||
foreach (var cl in userClaims)
|
foreach (var cl in userClaims)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue