Beispiel #1
0
        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()));
 }
Beispiel #3
0
        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"));
        }