public async Task CanResignIn(bool isPersistent, bool externalLogin) { // Setup var user = new TestUser { UserName = "******" }; var context = new DefaultHttpContext(); var auth = MockAuth(context); var loginProvider = "loginprovider"; var id = new ClaimsIdentity(); if (externalLogin) { id.AddClaim(new Claim(ClaimTypes.AuthenticationMethod, loginProvider)); } // REVIEW: auth changes we lost the ability to mock is persistent //var properties = new AuthenticationProperties { IsPersistent = isPersistent }; var authResult = AuthenticateResult.None(); auth.Setup(a => a.AuthenticateAsync(context, new IdentityCookieOptions().ApplicationCookieAuthenticationScheme)) .Returns(Task.FromResult(authResult)).Verifiable(); var manager = SetupUserManager(user); var signInManager = new Mock <SignInManager <TestUser> >(manager.Object, new HttpContextAccessor { HttpContext = context }, new Mock <IUserClaimsPrincipalFactory <TestUser> >().Object, null, null, new Mock <IAuthenticationSchemeProvider>().Object) { CallBase = true }; //signInManager.Setup(s => s.SignInAsync(user, It.Is<AuthenticationProperties>(p => p.IsPersistent == isPersistent), //externalLogin? loginProvider : null)).Returns(Task.FromResult(0)).Verifiable(); signInManager.Setup(s => s.SignInAsync(user, It.IsAny <AuthenticationProperties>(), null)).Returns(Task.FromResult(0)).Verifiable(); signInManager.Object.Context = context; // Act await signInManager.Object.RefreshSignInAsync(user); // Assert auth.Verify(); signInManager.Verify(); }
public Task <AuthenticateResult> AuthenticateAsync(HttpContext context, string scheme) { return(Task.FromResult(AuthenticateResult.None())); }
public async Task VerifyAccountControllerExternalLoginWithTokensFlow() { // Setup the external cookie like it would look from a real OAuth2 var externalId = "<externalId>"; var authScheme = "<authScheme>"; var externalIdentity = new ClaimsIdentity(); externalIdentity.AddClaim(new Claim(ClaimTypes.NameIdentifier, externalId)); var externalPrincipal = new ClaimsPrincipal(externalIdentity); var externalLogin = new ExternalLoginInfo(externalPrincipal, authScheme, externalId, "displayname") { AuthenticationTokens = new[] { new AuthenticationToken { Name = "refresh_token", Value = "refresh" }, new AuthenticationToken { Name = "access_token", Value = "access" } } }; var context = new DefaultHttpContext(); var auth = MockAuth(context); auth.Setup(a => a.AuthenticateAsync(context, It.IsAny <string>())).Returns(Task.FromResult(AuthenticateResult.None())); var contextAccessor = new Mock <IHttpContextAccessor>(); contextAccessor.Setup(a => a.HttpContext).Returns(context); var services = new ServiceCollection() .AddSingleton <IConfiguration>(new ConfigurationBuilder().Build()) .AddLogging() .AddSingleton(contextAccessor.Object); services.AddIdentity <TestUser, TestRole>(); services.AddSingleton <IUserStore <TestUser>, InMemoryStore <TestUser, TestRole> >(); services.AddSingleton <IRoleStore <TestRole>, InMemoryStore <TestUser, TestRole> >(); var app = new ApplicationBuilder(services.BuildServiceProvider()); // Act var user = new TestUser { UserName = "******" }; var userManager = app.ApplicationServices.GetRequiredService <UserManager <TestUser> >(); var signInManager = app.ApplicationServices.GetRequiredService <SignInManager <TestUser> >(); IdentityResultAssert.IsSuccess(await userManager.CreateAsync(user)); IdentityResultAssert.IsSuccess(await userManager.AddLoginAsync(user, new UserLoginInfo(authScheme, externalId, "whatever"))); IdentityResultAssert.IsSuccess(await signInManager.UpdateExternalAuthenticationTokensAsync(externalLogin)); Assert.Equal("refresh", await userManager.GetAuthenticationTokenAsync(user, authScheme, "refresh_token")); Assert.Equal("access", await userManager.GetAuthenticationTokenAsync(user, authScheme, "access_token")); }