Esempio n. 1
0
        public async Task ExceptionNotReportedInHeaderForOtherFailures(Type errorType)
        {
            var options = new JwtBearerOptions();

            options.SecurityTokenValidators.Clear();
            options.SecurityTokenValidators.Add(new InvalidTokenValidator(errorType));
            var server = CreateServer(options);

            var response = await SendAsync(server, "http://example.com/oauth", "Bearer someblob");

            Assert.Equal(HttpStatusCode.Unauthorized, response.Response.StatusCode);
            Assert.Equal("Bearer error=\"invalid_token\"", response.Response.Headers.WwwAuthenticate.First().ToString());
            Assert.Equal("", response.ResponseText);
        }
        public async Task InvalidTokenReceived()
        {
            var options = new JwtBearerOptions
            {
                AutomaticAuthenticate = true
            };

            options.SecurityTokenValidators.Clear();
            options.SecurityTokenValidators.Add(new InvalidTokenValidator());
            var server = CreateServer(options);

            var response = await SendAsync(server, "http://example.com/oauth", "Bearer someblob");

            Assert.Equal(HttpStatusCode.Unauthorized, response.Response.StatusCode);
            Assert.Equal("", response.ResponseText);
        }
Esempio n. 3
0
        // https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/179
        public async Task BearerTokenValidation()
        {
            var options = new JwtBearerOptions
            {
                Authority = "https://login.windows.net/tushartest.onmicrosoft.com",
                Audience  = "https://TusharTest.onmicrosoft.com/TodoListService-ManualJwt"
            };

            options.TokenValidationParameters.ValidateLifetime = false;
            var server = CreateServer(options);

            var newBearerToken = "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImtyaU1QZG1Cdng2OHNrVDgtbVBBQjNCc2VlQSJ9.eyJhdWQiOiJodHRwczovL1R1c2hhclRlc3Qub25taWNyb3NvZnQuY29tL1RvZG9MaXN0U2VydmljZS1NYW51YWxKd3QiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC9hZmJlY2UwMy1hZWFhLTRmM2YtODVlNy1jZTA4ZGQyMGNlNTAvIiwiaWF0IjoxNDE4MzMwNjE0LCJuYmYiOjE0MTgzMzA2MTQsImV4cCI6MTQxODMzNDUxNCwidmVyIjoiMS4wIiwidGlkIjoiYWZiZWNlMDMtYWVhYS00ZjNmLTg1ZTctY2UwOGRkMjBjZTUwIiwiYW1yIjpbInB3ZCJdLCJvaWQiOiI1Mzk3OTdjMi00MDE5LTQ2NTktOWRiNS03MmM0Yzc3NzhhMzMiLCJ1cG4iOiJWaWN0b3JAVHVzaGFyVGVzdC5vbm1pY3Jvc29mdC5jb20iLCJ1bmlxdWVfbmFtZSI6IlZpY3RvckBUdXNoYXJUZXN0Lm9ubWljcm9zb2Z0LmNvbSIsInN1YiI6IkQyMm9aMW9VTzEzTUFiQXZrdnFyd2REVE80WXZJdjlzMV9GNWlVOVUwYnciLCJmYW1pbHlfbmFtZSI6Ikd1cHRhIiwiZ2l2ZW5fbmFtZSI6IlZpY3RvciIsImFwcGlkIjoiNjEzYjVhZjgtZjJjMy00MWI2LWExZGMtNDE2Yzk3ODAzMGI3IiwiYXBwaWRhY3IiOiIwIiwic2NwIjoidXNlcl9pbXBlcnNvbmF0aW9uIiwiYWNyIjoiMSJ9.N_Kw1EhoVGrHbE6hOcm7ERdZ7paBQiNdObvp2c6T6n5CE8p0fZqmUd-ya_EqwElcD6SiKSiP7gj0gpNUnOJcBl_H2X8GseaeeMxBrZdsnDL8qecc6_ygHruwlPltnLTdka67s1Ow4fDSHaqhVTEk6lzGmNEcbNAyb0CxQxU6o7Fh0yHRiWoLsT8yqYk8nKzsHXfZBNby4aRo3_hXaa4i0SZLYfDGGYPdttG4vT_u54QGGd4Wzbonv2gjDlllOVGOwoJS6kfl1h8mk0qxdiIaT_ChbDWgkWvTB7bTvBE-EgHgV0XmAo0WtJeSxgjsG3KhhEPsONmqrSjhIUV4IVnF2w";
            var response       = await SendAsync(server, "http://example.com/oauth", newBearerToken);

            Assert.Equal(HttpStatusCode.OK, response.Response.StatusCode);
        }
Esempio n. 4
0
        public async Task ExceptionsReportedInHeaderForMultipleAuthenticationFailures()
        {
            var options = new JwtBearerOptions();

            options.SecurityTokenValidators.Clear();
            options.SecurityTokenValidators.Add(new InvalidTokenValidator(typeof(SecurityTokenInvalidAudienceException)));
            options.SecurityTokenValidators.Add(new InvalidTokenValidator(typeof(SecurityTokenSignatureKeyNotFoundException)));
            var server = CreateServer(options);

            var response = await SendAsync(server, "http://example.com/oauth", "Bearer someblob");

            Assert.Equal(HttpStatusCode.Unauthorized, response.Response.StatusCode);
            Assert.Equal("Bearer error=\"invalid_token\", error_description=\"The audience is invalid; The signature key was not found\"",
                         response.Response.Headers.WwwAuthenticate.First().ToString());
            Assert.Equal("", response.ResponseText);
        }
        public async Task CustomTokenValidated()
        {
            var options = new JwtBearerOptions
            {
                AutomaticAuthenticate = true,
                Events = new JwtBearerEvents()
                {
                    OnTokenValidated = context =>
                    {
                        // Retrieve the NameIdentifier claim from the identity
                        // returned by the custom security token validator.
                        var identity   = (ClaimsIdentity)context.Ticket.Principal.Identity;
                        var identifier = identity.FindFirst(ClaimTypes.NameIdentifier);

                        Assert.Equal("Bob le Tout Puissant", identifier.Value);

                        // Remove the existing NameIdentifier claim and replace it
                        // with a new one containing a different value.
                        identity.RemoveClaim(identifier);
                        // Make sure to use a different name identifier
                        // than the one defined by BlobTokenValidator.
                        identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, "Bob le Magnifique"));

                        return(Task.FromResult <object>(null));
                    }
                }
            };

            options.SecurityTokenValidators.Clear();
            options.SecurityTokenValidators.Add(new BlobTokenValidator(options.AuthenticationScheme));
            var server = CreateServer(options);

            var response = await SendAsync(server, "http://example.com/oauth", "Bearer someblob");

            Assert.Equal(HttpStatusCode.OK, response.Response.StatusCode);
            Assert.Equal("Bob le Magnifique", response.ResponseText);
        }
        private static TestServer CreateServer(JwtBearerOptions options, Func <HttpContext, bool> handler = null)
        {
            var builder = new WebHostBuilder()
                          .Configure(app =>
            {
                if (options != null)
                {
                    app.UseJwtBearerAuthentication(options);
                }

                app.Use(async(context, next) =>
                {
                    if (context.Request.Path == new PathString("/checkforerrors"))
                    {
                        var authContext = new AuthenticateContext(Http.Authentication.AuthenticationManager.AutomaticScheme);
                        await context.Authentication.AuthenticateAsync(authContext);
                        if (authContext.Error != null)
                        {
                            throw new Exception("Failed to authenticate", authContext.Error);
                        }
                        return;
                    }
                    else if (context.Request.Path == new PathString("/oauth"))
                    {
                        if (context.User == null ||
                            context.User.Identity == null ||
                            !context.User.Identity.IsAuthenticated)
                        {
                            context.Response.StatusCode = 401;

                            return;
                        }

                        var identifier = context.User.FindFirst(ClaimTypes.NameIdentifier);
                        if (identifier == null)
                        {
                            context.Response.StatusCode = 500;

                            return;
                        }

                        await context.Response.WriteAsync(identifier.Value);
                    }
                    else if (context.Request.Path == new PathString("/unauthorized"))
                    {
                        // Simulate Authorization failure
                        var result = await context.Authentication.AuthenticateAsync(JwtBearerDefaults.AuthenticationScheme);
                        await context.Authentication.ChallengeAsync(JwtBearerDefaults.AuthenticationScheme);
                    }
                    else if (context.Request.Path == new PathString("/signIn"))
                    {
                        await Assert.ThrowsAsync <NotSupportedException>(() => context.Authentication.SignInAsync(JwtBearerDefaults.AuthenticationScheme, new ClaimsPrincipal()));
                    }
                    else if (context.Request.Path == new PathString("/signOut"))
                    {
                        await Assert.ThrowsAsync <NotSupportedException>(() => context.Authentication.SignOutAsync(JwtBearerDefaults.AuthenticationScheme));
                    }
                    else
                    {
                        await next();
                    }
                });
            })
                          .ConfigureServices(services => services.AddAuthentication());

            return(new TestServer(builder));
        }
 public JwtBearerChallengeContext(HttpContext context, JwtBearerOptions options, AuthenticationProperties properties)
     : base(context, options)
 {
     Properties = properties;
 }
 public MessageReceivedContext(HttpContext context, JwtBearerOptions options)
     : base(context, options)
 {
 }
 public TokenValidatedContext(HttpContext context, JwtBearerOptions options)
     : base(context, options)
 {
 }
Esempio n. 10
0
 private void ConfigureDefaults(JwtBearerOptions o)
 {
 }
Esempio n. 11
0
 public AuthenticationFailedContext(HttpContext context, JwtBearerOptions options)
     : base(context, options)
 {
 }