예제 #1
0
        public static void AmazonOptions_Sets_Properties_Correctly()
        {
            // Act
            var actual = new AmazonOptions();

            // Assert
            actual.CallbackPath.ShouldBe(new PathString("/signin-amazon"));

            actual.AuthorizationEndpoint.ShouldBe(AmazonDefaults.AuthorizationEndpoint);
            actual.TokenEndpoint.ShouldBe(AmazonDefaults.TokenEndpoint);
            actual.UserInformationEndpoint.ShouldBe(AmazonDefaults.UserInformationEndpoint);

            actual.ClaimActions.ShouldNotBeNull();
            actual.ClaimActions.Count().ShouldBeGreaterThanOrEqualTo(4);

            actual.Fields.ShouldNotBeNull();
            actual.Fields.Count.ShouldBe(3);
            actual.Fields.ShouldContain("email");
            actual.Fields.ShouldContain("name");
            actual.Fields.ShouldContain("user_id");

            actual.Scope.ShouldNotBeNull();
            actual.Scope.Count.ShouldBeGreaterThanOrEqualTo(2);
            actual.Scope.ShouldContain("profile");
            actual.Scope.ShouldContain("profile:user_id");
        }
예제 #2
0
        public static async Task Can_Create_Principal_From_Amazon_User_Endpoint()
        {
            // Arrange
            string accessToken = Guid.NewGuid().ToString();

            var data = new
            {
                email   = "*****@*****.**",
                name    = "Martin Costello",
                user_id = "my-user-id",
            };

            var options = new AmazonOptions()
            {
                ClientId     = "amazon-client-id",
                ClientSecret = "amazon-client-secret",
            };

            var identity   = new ClaimsIdentity();
            var properties = new AuthenticationProperties();
            var tokens     = CreateOAuthToken(accessToken);

            AuthenticationTicket actual;

            using (var handler = new AmazonHttpMessageHandler(accessToken, data))
            {
                using (var backchannel = new HttpClient(handler, false))
                {
                    options.Backchannel = backchannel;

                    AmazonHandler target = await CreateTarget(options);

                    // Act
                    actual = await target.CreateAuthenticationTicketAsync(identity, properties, tokens);
                }
            }

            // Assert
            actual.ShouldNotBeNull();

            actual.AuthenticationScheme.ShouldBe(AmazonDefaults.AuthenticationScheme);
            actual.Principal.HasClaim(ClaimTypes.Email, data.email).ShouldBeTrue();
            actual.Principal.HasClaim(ClaimTypes.Name, data.name).ShouldBeTrue();
            actual.Principal.HasClaim(ClaimTypes.NameIdentifier, data.user_id).ShouldBeTrue();
        }
예제 #3
0
        private static async Task <AmazonHandler> CreateTarget(AmazonOptions options)
        {
            var mock = new Mock <IOptionsMonitor <AmazonOptions> >();

            mock.Setup((p) => p.Get("Amazon"))
            .Returns(options);

            var loggerFactory = new LoggerFactory();
            var urlEncoder    = UrlEncoder.Default;
            var clock         = new SystemClock();

            var handler = new AmazonHandler(mock.Object, loggerFactory, urlEncoder, clock);

            var scheme  = new AuthenticationScheme("Amazon", "Amazon", handler.GetType());
            var context = new DefaultHttpContext();

            await handler.InitializeAsync(scheme, context);

            return(handler);
        }