зеркало из https://github.com/aspnet/Identity.git
Port GetUserId/UserName IIdentity extensions
This commit is contained in:
Родитель
43b780c8ac
Коммит
4a3ad0870c
|
@ -0,0 +1,56 @@
|
||||||
|
using System.Security.Claims;
|
||||||
|
|
||||||
|
namespace System.Security.Principal
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Extensions making it easier to get the user name/user id claims off of an identity
|
||||||
|
/// </summary>
|
||||||
|
public static class IdentityExtensions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Return the user name using the UserNameClaimType
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="identity"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string GetUserName(this IIdentity identity)
|
||||||
|
{
|
||||||
|
if (identity == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("identity");
|
||||||
|
}
|
||||||
|
var ci = identity as ClaimsIdentity;
|
||||||
|
return ci != null ? ci.FindFirstValue(ClaimsIdentity.DefaultNameClaimType) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Return the user id using the UserIdClaimType
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="identity"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string GetUserId(this IIdentity identity)
|
||||||
|
{
|
||||||
|
if (identity == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("identity");
|
||||||
|
}
|
||||||
|
var ci = identity as ClaimsIdentity;
|
||||||
|
return ci != null ? ci.FindFirstValue(ClaimTypes.NameIdentifier) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Return the claim value for the first claim with the specified type if it exists, null otherwise
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="identity"></param>
|
||||||
|
/// <param name="claimType"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string FindFirstValue(this ClaimsIdentity identity, string claimType)
|
||||||
|
{
|
||||||
|
if (identity == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("identity");
|
||||||
|
}
|
||||||
|
var claim = identity.FindFirst(claimType);
|
||||||
|
return claim != null ? claim.Value : null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,74 @@
|
||||||
|
using System;
|
||||||
|
using System.Security.Claims;
|
||||||
|
using System.Security.Principal;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Identity.Security.Test
|
||||||
|
{
|
||||||
|
public class IdentityExtensionsTest
|
||||||
|
{
|
||||||
|
public const string ExternalAuthenticationType = "TestExternalAuth";
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void IdentityNullCheckTest()
|
||||||
|
{
|
||||||
|
IIdentity identity = null;
|
||||||
|
Assert.Throws<ArgumentNullException>("identity", () => identity.GetUserId());
|
||||||
|
Assert.Throws<ArgumentNullException>("identity", () => identity.GetUserName());
|
||||||
|
ClaimsIdentity claimsIdentity = null;
|
||||||
|
Assert.Throws<ArgumentNullException>("identity", () => claimsIdentity.FindFirstValue(null));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void IdentityNullIfNotClaimsIdentityTest()
|
||||||
|
{
|
||||||
|
IIdentity identity = new TestIdentity();
|
||||||
|
Assert.Null(identity.GetUserId());
|
||||||
|
Assert.Null(identity.GetUserName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void UserNameAndIdTest()
|
||||||
|
{
|
||||||
|
var id = CreateTestExternalIdentity();
|
||||||
|
Assert.Equal("NameIdentifier", id.GetUserId());
|
||||||
|
Assert.Equal("Name", id.GetUserName());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void IdentityExtensionsFindFirstValueNullIfUnknownTest()
|
||||||
|
{
|
||||||
|
var id = CreateTestExternalIdentity();
|
||||||
|
Assert.Null(id.FindFirstValue("bogus"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ClaimsIdentity CreateTestExternalIdentity()
|
||||||
|
{
|
||||||
|
return new ClaimsIdentity(
|
||||||
|
new[]
|
||||||
|
{
|
||||||
|
new Claim(ClaimTypes.NameIdentifier, "NameIdentifier", null, ExternalAuthenticationType),
|
||||||
|
new Claim(ClaimTypes.Name, "Name")
|
||||||
|
},
|
||||||
|
ExternalAuthenticationType);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class TestIdentity : IIdentity
|
||||||
|
{
|
||||||
|
public string AuthenticationType
|
||||||
|
{
|
||||||
|
get { throw new NotImplementedException(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsAuthenticated
|
||||||
|
{
|
||||||
|
get { throw new NotImplementedException(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Name
|
||||||
|
{
|
||||||
|
get { throw new NotImplementedException(); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Загрузка…
Ссылка в новой задаче