Hi,
I want to moq specific claim and specific role using et Asp.net identity
public static ClaimsPrincipal MockIdentity(int userId, string username, List<Claim> userClaims, bool isAuthenticated = true, string[] userRoles = null, Claim ClaimToVerify = null) { Mock<GenericIdentity> mockGenericIdentity = new Mock<GenericIdentity>(username); mockGenericIdentity.Setup(x => x.Claims).Returns(userClaims); mockGenericIdentity.Setup(x => x.HasClaim(c => c.Type == ClaimToVerify.Type && c.Value == ClaimToVerify.Value)).Returns(true); mockGenericIdentity.Setup(x => x.IsAuthenticated).Returns(isAuthenticated); mockGenericIdentity.Setup(x => x.IsAuthenticated).Returns(isAuthenticated); Mock<ClaimsPrincipal> mockClaimsPrincipal = new Mock<ClaimsPrincipal>(mockGenericIdentity.Object); mockClaimsPrincipal.Setup(x => x.Identity.IsAuthenticated).Returns(isAuthenticated); mockClaimsPrincipal.Setup(x => x.Identity.Name).Returns(username); mockClaimsPrincipal.Setup(x => x.Claims).Returns(userClaims); mockClaimsPrincipal.Setup(x => x.IsInRole("admin")).Returns(true); return mockClaimsPrincipal.Object; }
principal.HasClaim(x => x.Type == ClaimType && x.Value == ClaimValue))) returns always false, why
public override Task OnAuthorizationAsync(HttpActionContext actionContext, System.Threading.CancellationToken cancellationToken) { var principal = actionContext.RequestContext.Principal as ClaimsPrincipal; if (!principal.Identity.IsAuthenticated) { actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized); return Task.FromResult<object>(null); } if (Roles.Any(r => !principal.IsInRole(r))) { actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized); return Task.FromResult<object>(null); } if (!(principal.HasClaim(x => x.Type == ClaimType && x.Value == ClaimValue))) { actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized); actionContext.Response.Headers.Add("WWW-Authenticate", "Bearer"); return Task.FromResult<object>(null); } //User is Authorized, complete execution return Task.FromResult<object>(null); }
Regards