ForbidAsync now uses correct Schemes method (#918)

* ForbidAsync now uses correct Schemes method

* comment

* adds tests
This commit is contained in:
Justin Kotalik 2017-08-19 22:09:22 -07:00 committed by GitHub
parent 594f55947f
commit 27b0f60f09
2 changed files with 55 additions and 3 deletions

View File

@ -113,11 +113,11 @@ namespace Microsoft.AspNetCore.Authentication
{
if (scheme == null)
{
var defaultChallengeScheme = await Schemes.GetDefaultChallengeSchemeAsync();
scheme = defaultChallengeScheme?.Name;
var defaultForbidScheme = await Schemes.GetDefaultForbidSchemeAsync();
scheme = defaultForbidScheme?.Name;
if (scheme == null)
{
throw new InvalidOperationException($"No authenticationScheme was specified, and there was no DefaultChallengeScheme found.");
throw new InvalidOperationException($"No authenticationScheme was specified, and there was no DefaultForbidScheme found.");
}
}

View File

@ -122,6 +122,20 @@ namespace Microsoft.AspNetCore.Authentication
await Assert.ThrowsAsync<InvalidOperationException>(() => context.SignInAsync(new ClaimsPrincipal()));
}
[Fact]
public async Task ServicesWithDefaultForbidMethod_CallsForbidMethod()
{
var services = new ServiceCollection().AddOptions().AddAuthenticationCore(o =>
{
o.AddScheme<ForbidHandler>("forbid", "whatever");
o.DefaultForbidScheme = "forbid";
}).BuildServiceProvider();
var context = new DefaultHttpContext();
context.RequestServices = services;
await context.ForbidAsync();
}
private class BaseHandler : IAuthenticationHandler
{
@ -245,5 +259,43 @@ namespace Microsoft.AspNetCore.Authentication
}
}
private class ForbidHandler : IAuthenticationHandler, IAuthenticationRequestHandler, IAuthenticationSignInHandler, IAuthenticationSignOutHandler
{
public Task<AuthenticateResult> AuthenticateAsync()
{
throw new NotImplementedException();
}
public Task ChallengeAsync(AuthenticationProperties properties)
{
throw new NotImplementedException();
}
public Task ForbidAsync(AuthenticationProperties properties)
{
return Task.FromResult(0);
}
public Task<bool> HandleRequestAsync()
{
throw new NotImplementedException();
}
public Task InitializeAsync(AuthenticationScheme scheme, HttpContext context)
{
return Task.FromResult(0);
}
public Task SignInAsync(ClaimsPrincipal user, AuthenticationProperties properties)
{
throw new NotImplementedException();
}
public Task SignOutAsync(AuthenticationProperties properties)
{
throw new NotImplementedException();
}
}
}
}