#160 Move AllowAnonymous from the AuthenticationSchemes to its own bool
This commit is contained in:
parent
a9b5cec33d
commit
4b36501bd8
|
|
@ -19,7 +19,8 @@ namespace SelfHostServer
|
||||||
// Server options can be configured here instead of in Main.
|
// Server options can be configured here instead of in Main.
|
||||||
services.Configure<WebListenerOptions>(options =>
|
services.Configure<WebListenerOptions>(options =>
|
||||||
{
|
{
|
||||||
options.Listener.AuthenticationManager.AuthenticationSchemes = AuthenticationSchemes.AllowAnonymous;
|
options.Listener.AuthenticationManager.AuthenticationSchemes = AuthenticationSchemes.None;
|
||||||
|
options.Listener.AuthenticationManager.AllowAnonymous = true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -51,7 +52,8 @@ namespace SelfHostServer
|
||||||
.UseStartup<Startup>()
|
.UseStartup<Startup>()
|
||||||
.UseWebListener(options =>
|
.UseWebListener(options =>
|
||||||
{
|
{
|
||||||
options.Listener.AuthenticationManager.AuthenticationSchemes = AuthenticationSchemes.AllowAnonymous;
|
options.Listener.AuthenticationManager.AuthenticationSchemes = AuthenticationSchemes.None;
|
||||||
|
options.Listener.AuthenticationManager.AllowAnonymous = true;
|
||||||
})
|
})
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,38 +44,29 @@ namespace Microsoft.Net.Http.Server
|
||||||
|
|
||||||
private WebListener _server;
|
private WebListener _server;
|
||||||
private AuthenticationSchemes _authSchemes;
|
private AuthenticationSchemes _authSchemes;
|
||||||
|
private bool _allowAnonymous = true;
|
||||||
|
|
||||||
internal AuthenticationManager(WebListener listener)
|
internal AuthenticationManager(WebListener listener)
|
||||||
{
|
{
|
||||||
_server = listener;
|
_server = listener;
|
||||||
_authSchemes = AuthenticationSchemes.AllowAnonymous;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Properties
|
#region Properties
|
||||||
|
|
||||||
public AuthenticationSchemes AuthenticationSchemes
|
public AuthenticationSchemes AuthenticationSchemes
|
||||||
{
|
{
|
||||||
get
|
get { return _authSchemes; }
|
||||||
{
|
|
||||||
return _authSchemes;
|
|
||||||
}
|
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (_authSchemes == AuthenticationSchemes.None)
|
|
||||||
{
|
|
||||||
throw new ArgumentException("value", "'None' is not a valid authentication type. Use 'AllowAnonymous' instead.");
|
|
||||||
}
|
|
||||||
_authSchemes = value;
|
_authSchemes = value;
|
||||||
SetServerSecurity();
|
SetServerSecurity();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal bool AllowAnonymous
|
public bool AllowAnonymous
|
||||||
{
|
{
|
||||||
get
|
get { return _allowAnonymous; }
|
||||||
{
|
set { _allowAnonymous = value; }
|
||||||
return ((_authSchemes & AuthenticationSchemes.AllowAnonymous) == AuthenticationSchemes.AllowAnonymous);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion Properties
|
#endregion Properties
|
||||||
|
|
@ -86,7 +77,7 @@ namespace Microsoft.Net.Http.Server
|
||||||
new UnsafeNclNativeMethods.HttpApi.HTTP_SERVER_AUTHENTICATION_INFO();
|
new UnsafeNclNativeMethods.HttpApi.HTTP_SERVER_AUTHENTICATION_INFO();
|
||||||
|
|
||||||
authInfo.Flags = UnsafeNclNativeMethods.HttpApi.HTTP_FLAGS.HTTP_PROPERTY_FLAG_PRESENT;
|
authInfo.Flags = UnsafeNclNativeMethods.HttpApi.HTTP_FLAGS.HTTP_PROPERTY_FLAG_PRESENT;
|
||||||
var authSchemes = (UnsafeNclNativeMethods.HttpApi.HTTP_AUTH_TYPES)(_authSchemes & ~AuthenticationSchemes.AllowAnonymous);
|
var authSchemes = (UnsafeNclNativeMethods.HttpApi.HTTP_AUTH_TYPES)_authSchemes;
|
||||||
if (authSchemes != UnsafeNclNativeMethods.HttpApi.HTTP_AUTH_TYPES.NONE)
|
if (authSchemes != UnsafeNclNativeMethods.HttpApi.HTTP_AUTH_TYPES.NONE)
|
||||||
{
|
{
|
||||||
authInfo.AuthSchemes = authSchemes;
|
authInfo.AuthSchemes = authSchemes;
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,6 @@ namespace Microsoft.Net.Http.Server
|
||||||
// Digest = 0x2, // TODO: Verify this is no longer supported by Http.Sys
|
// Digest = 0x2, // TODO: Verify this is no longer supported by Http.Sys
|
||||||
NTLM = 0x4,
|
NTLM = 0x4,
|
||||||
Negotiate = 0x8,
|
Negotiate = 0x8,
|
||||||
Kerberos = 0x10,
|
Kerberos = 0x10
|
||||||
AllowAnonymous = 0x1000
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ namespace Microsoft.Net.Http.Server
|
||||||
_expectedBodyLength = 0;
|
_expectedBodyLength = 0;
|
||||||
_nativeStream = null;
|
_nativeStream = null;
|
||||||
_cacheTtl = null;
|
_cacheTtl = null;
|
||||||
_authChallenges = RequestContext.Server.AuthenticationManager.AuthenticationSchemes & ~AuthenticationSchemes.AllowAnonymous;
|
_authChallenges = RequestContext.Server.AuthenticationManager.AuthenticationSchemes;
|
||||||
}
|
}
|
||||||
|
|
||||||
private enum ResponseState
|
private enum ResponseState
|
||||||
|
|
|
||||||
|
|
@ -29,8 +29,11 @@ namespace Microsoft.AspNetCore.Server.WebListener
|
||||||
{
|
{
|
||||||
public class AuthenticationTests
|
public class AuthenticationTests
|
||||||
{
|
{
|
||||||
|
private static bool AllowAnoymous = true;
|
||||||
|
private static bool DenyAnoymous = false;
|
||||||
|
|
||||||
[Theory]
|
[Theory]
|
||||||
[InlineData(AuthenticationSchemes.AllowAnonymous)]
|
[InlineData(AuthenticationSchemes.None)]
|
||||||
[InlineData(AuthenticationSchemes.Negotiate)]
|
[InlineData(AuthenticationSchemes.Negotiate)]
|
||||||
[InlineData(AuthenticationSchemes.NTLM)]
|
[InlineData(AuthenticationSchemes.NTLM)]
|
||||||
// [InlineData(AuthenticationSchemes.Digest)]
|
// [InlineData(AuthenticationSchemes.Digest)]
|
||||||
|
|
@ -39,7 +42,7 @@ namespace Microsoft.AspNetCore.Server.WebListener
|
||||||
public async Task AuthTypes_AllowAnonymous_NoChallenge(AuthenticationSchemes authType)
|
public async Task AuthTypes_AllowAnonymous_NoChallenge(AuthenticationSchemes authType)
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
using (Utilities.CreateHttpAuthServer(authType | AuthenticationSchemes.AllowAnonymous, out address, httpContext =>
|
using (Utilities.CreateHttpAuthServer(authType, AllowAnoymous, out address, httpContext =>
|
||||||
{
|
{
|
||||||
Assert.NotNull(httpContext.User);
|
Assert.NotNull(httpContext.User);
|
||||||
Assert.NotNull(httpContext.User.Identity);
|
Assert.NotNull(httpContext.User.Identity);
|
||||||
|
|
@ -62,7 +65,7 @@ namespace Microsoft.AspNetCore.Server.WebListener
|
||||||
public async Task AuthType_RequireAuth_ChallengesAdded(AuthenticationSchemes authType)
|
public async Task AuthType_RequireAuth_ChallengesAdded(AuthenticationSchemes authType)
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
using (Utilities.CreateHttpAuthServer(authType, out address, httpContext =>
|
using (Utilities.CreateHttpAuthServer(authType, DenyAnoymous, out address, httpContext =>
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}))
|
}))
|
||||||
|
|
@ -82,7 +85,7 @@ namespace Microsoft.AspNetCore.Server.WebListener
|
||||||
public async Task AuthType_AllowAnonymousButSpecify401_ChallengesAdded(AuthenticationSchemes authType)
|
public async Task AuthType_AllowAnonymousButSpecify401_ChallengesAdded(AuthenticationSchemes authType)
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
using (Utilities.CreateHttpAuthServer(authType | AuthenticationSchemes.AllowAnonymous, out address, httpContext =>
|
using (Utilities.CreateHttpAuthServer(authType, AllowAnoymous, out address, httpContext =>
|
||||||
{
|
{
|
||||||
Assert.NotNull(httpContext.User);
|
Assert.NotNull(httpContext.User);
|
||||||
Assert.NotNull(httpContext.User.Identity);
|
Assert.NotNull(httpContext.User.Identity);
|
||||||
|
|
@ -106,8 +109,8 @@ namespace Microsoft.AspNetCore.Server.WebListener
|
||||||
AuthenticationSchemes.Negotiate
|
AuthenticationSchemes.Negotiate
|
||||||
| AuthenticationSchemes.NTLM
|
| AuthenticationSchemes.NTLM
|
||||||
/* | AuthenticationSchemes.Digest TODO: Not implemented */
|
/* | AuthenticationSchemes.Digest TODO: Not implemented */
|
||||||
| AuthenticationSchemes.Basic
|
| AuthenticationSchemes.Basic,
|
||||||
| AuthenticationSchemes.AllowAnonymous,
|
true,
|
||||||
out address,
|
out address,
|
||||||
httpContext =>
|
httpContext =>
|
||||||
{
|
{
|
||||||
|
|
@ -134,7 +137,7 @@ namespace Microsoft.AspNetCore.Server.WebListener
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
int requestId = 0;
|
int requestId = 0;
|
||||||
using (Utilities.CreateHttpAuthServer(authType | AuthenticationSchemes.AllowAnonymous, out address, httpContext =>
|
using (Utilities.CreateHttpAuthServer(authType, AllowAnoymous, out address, httpContext =>
|
||||||
{
|
{
|
||||||
Assert.NotNull(httpContext.User);
|
Assert.NotNull(httpContext.User);
|
||||||
Assert.NotNull(httpContext.User.Identity);
|
Assert.NotNull(httpContext.User.Identity);
|
||||||
|
|
@ -169,7 +172,7 @@ namespace Microsoft.AspNetCore.Server.WebListener
|
||||||
public async Task AuthTypes_RequireAuth_Success(AuthenticationSchemes authType)
|
public async Task AuthTypes_RequireAuth_Success(AuthenticationSchemes authType)
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
using (Utilities.CreateHttpAuthServer(authType, out address, httpContext =>
|
using (Utilities.CreateHttpAuthServer(authType, DenyAnoymous, out address, httpContext =>
|
||||||
{
|
{
|
||||||
Assert.NotNull(httpContext.User);
|
Assert.NotNull(httpContext.User);
|
||||||
Assert.NotNull(httpContext.User.Identity);
|
Assert.NotNull(httpContext.User.Identity);
|
||||||
|
|
@ -183,7 +186,7 @@ namespace Microsoft.AspNetCore.Server.WebListener
|
||||||
}
|
}
|
||||||
|
|
||||||
[Theory]
|
[Theory]
|
||||||
[InlineData(AuthenticationSchemes.AllowAnonymous)]
|
[InlineData(AuthenticationSchemes.None)]
|
||||||
[InlineData(AuthenticationSchemes.Negotiate)]
|
[InlineData(AuthenticationSchemes.Negotiate)]
|
||||||
[InlineData(AuthenticationSchemes.NTLM)]
|
[InlineData(AuthenticationSchemes.NTLM)]
|
||||||
// [InlineData(AuthenticationSchemes.Digest)]
|
// [InlineData(AuthenticationSchemes.Digest)]
|
||||||
|
|
@ -191,10 +194,10 @@ namespace Microsoft.AspNetCore.Server.WebListener
|
||||||
public async Task AuthTypes_GetSingleDescriptions(AuthenticationSchemes authType)
|
public async Task AuthTypes_GetSingleDescriptions(AuthenticationSchemes authType)
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
using (Utilities.CreateHttpAuthServer(authType | AuthenticationSchemes.AllowAnonymous, out address, httpContext =>
|
using (Utilities.CreateHttpAuthServer(authType, AllowAnoymous, out address, httpContext =>
|
||||||
{
|
{
|
||||||
var resultList = httpContext.Authentication.GetAuthenticationSchemes();
|
var resultList = httpContext.Authentication.GetAuthenticationSchemes();
|
||||||
if (authType == AuthenticationSchemes.AllowAnonymous)
|
if (authType == AuthenticationSchemes.None)
|
||||||
{
|
{
|
||||||
Assert.Equal(0, resultList.Count());
|
Assert.Equal(0, resultList.Count());
|
||||||
}
|
}
|
||||||
|
|
@ -224,7 +227,7 @@ namespace Microsoft.AspNetCore.Server.WebListener
|
||||||
| AuthenticationSchemes.NTLM
|
| AuthenticationSchemes.NTLM
|
||||||
| /*AuthenticationSchemes.Digest
|
| /*AuthenticationSchemes.Digest
|
||||||
|*/ AuthenticationSchemes.Basic;
|
|*/ AuthenticationSchemes.Basic;
|
||||||
using (Utilities.CreateHttpAuthServer(authType | AuthenticationSchemes.AllowAnonymous, out address, httpContext =>
|
using (Utilities.CreateHttpAuthServer(authType, AllowAnoymous, out address, httpContext =>
|
||||||
{
|
{
|
||||||
var resultList = httpContext.Authentication.GetAuthenticationSchemes();
|
var resultList = httpContext.Authentication.GetAuthenticationSchemes();
|
||||||
Assert.Equal(3, resultList.Count());
|
Assert.Equal(3, resultList.Count());
|
||||||
|
|
@ -247,7 +250,7 @@ namespace Microsoft.AspNetCore.Server.WebListener
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
var authTypeList = authType.ToString().Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
var authTypeList = authType.ToString().Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
using (Utilities.CreateHttpAuthServer(authType | AuthenticationSchemes.AllowAnonymous, out address, async httpContext =>
|
using (Utilities.CreateHttpAuthServer(authType, AllowAnoymous, out address, async httpContext =>
|
||||||
{
|
{
|
||||||
Assert.NotNull(httpContext.User);
|
Assert.NotNull(httpContext.User);
|
||||||
Assert.NotNull(httpContext.User.Identity);
|
Assert.NotNull(httpContext.User.Identity);
|
||||||
|
|
@ -275,7 +278,7 @@ namespace Microsoft.AspNetCore.Server.WebListener
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
var authTypeList = authType.ToString().Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
var authTypeList = authType.ToString().Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
using (Utilities.CreateHttpAuthServer(authType, out address, async httpContext =>
|
using (Utilities.CreateHttpAuthServer(authType, DenyAnoymous, out address, async httpContext =>
|
||||||
{
|
{
|
||||||
Assert.NotNull(httpContext.User);
|
Assert.NotNull(httpContext.User);
|
||||||
Assert.NotNull(httpContext.User.Identity);
|
Assert.NotNull(httpContext.User.Identity);
|
||||||
|
|
@ -308,7 +311,7 @@ namespace Microsoft.AspNetCore.Server.WebListener
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
var authTypeList = authType.ToString().Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
var authTypeList = authType.ToString().Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
using (Utilities.CreateHttpAuthServer(authType | AuthenticationSchemes.AllowAnonymous, out address, httpContext =>
|
using (Utilities.CreateHttpAuthServer(authType, AllowAnoymous, out address, httpContext =>
|
||||||
{
|
{
|
||||||
Assert.NotNull(httpContext.User);
|
Assert.NotNull(httpContext.User);
|
||||||
Assert.NotNull(httpContext.User.Identity);
|
Assert.NotNull(httpContext.User.Identity);
|
||||||
|
|
@ -333,7 +336,7 @@ namespace Microsoft.AspNetCore.Server.WebListener
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
var authTypeList = authType.ToString().Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
var authTypeList = authType.ToString().Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
using (Utilities.CreateHttpAuthServer(authType | AuthenticationSchemes.AllowAnonymous, out address, async httpContext =>
|
using (Utilities.CreateHttpAuthServer(authType, AllowAnoymous, out address, async httpContext =>
|
||||||
{
|
{
|
||||||
Assert.NotNull(httpContext.User);
|
Assert.NotNull(httpContext.User);
|
||||||
Assert.NotNull(httpContext.User.Identity);
|
Assert.NotNull(httpContext.User.Identity);
|
||||||
|
|
@ -360,7 +363,7 @@ namespace Microsoft.AspNetCore.Server.WebListener
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
var authTypes = AuthenticationSchemes.Negotiate | AuthenticationSchemes.NTLM | /*AuthenticationSchemes.Digest |*/ AuthenticationSchemes.Basic;
|
var authTypes = AuthenticationSchemes.Negotiate | AuthenticationSchemes.NTLM | /*AuthenticationSchemes.Digest |*/ AuthenticationSchemes.Basic;
|
||||||
using (Utilities.CreateHttpAuthServer(authTypes | AuthenticationSchemes.AllowAnonymous, out address, httpContext =>
|
using (Utilities.CreateHttpAuthServer(authTypes, AllowAnoymous, out address, httpContext =>
|
||||||
{
|
{
|
||||||
Assert.NotNull(httpContext.User);
|
Assert.NotNull(httpContext.User);
|
||||||
Assert.NotNull(httpContext.User.Identity);
|
Assert.NotNull(httpContext.User.Identity);
|
||||||
|
|
@ -386,7 +389,7 @@ namespace Microsoft.AspNetCore.Server.WebListener
|
||||||
var authTypes = AuthenticationSchemes.Negotiate | AuthenticationSchemes.NTLM | /*AuthenticationSchemes.Digest |*/ AuthenticationSchemes.Basic;
|
var authTypes = AuthenticationSchemes.Negotiate | AuthenticationSchemes.NTLM | /*AuthenticationSchemes.Digest |*/ AuthenticationSchemes.Basic;
|
||||||
authTypes = authTypes & ~authType;
|
authTypes = authTypes & ~authType;
|
||||||
var authTypeList = authType.ToString().Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
var authTypeList = authType.ToString().Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
using (Utilities.CreateHttpAuthServer(authTypes | AuthenticationSchemes.AllowAnonymous, out address, httpContext =>
|
using (Utilities.CreateHttpAuthServer(authTypes, AllowAnoymous, out address, httpContext =>
|
||||||
{
|
{
|
||||||
Assert.NotNull(httpContext.User);
|
Assert.NotNull(httpContext.User);
|
||||||
Assert.NotNull(httpContext.User.Identity);
|
Assert.NotNull(httpContext.User.Identity);
|
||||||
|
|
@ -408,8 +411,8 @@ namespace Microsoft.AspNetCore.Server.WebListener
|
||||||
public async Task AuthTypes_Forbid_Forbidden(AuthenticationSchemes authType)
|
public async Task AuthTypes_Forbid_Forbidden(AuthenticationSchemes authType)
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
var authTypes = AuthenticationSchemes.AllowAnonymous | AuthenticationSchemes.Negotiate | AuthenticationSchemes.NTLM | /*AuthenticationSchemes.Digest |*/ AuthenticationSchemes.Basic;
|
var authTypes = AuthenticationSchemes.Negotiate | AuthenticationSchemes.NTLM | /*AuthenticationSchemes.Digest |*/ AuthenticationSchemes.Basic;
|
||||||
using (Utilities.CreateHttpAuthServer(authTypes, out address, httpContext =>
|
using (Utilities.CreateHttpAuthServer(authTypes, AllowAnoymous, out address, httpContext =>
|
||||||
{
|
{
|
||||||
Assert.NotNull(httpContext.User);
|
Assert.NotNull(httpContext.User);
|
||||||
Assert.NotNull(httpContext.User.Identity);
|
Assert.NotNull(httpContext.User.Identity);
|
||||||
|
|
@ -431,7 +434,7 @@ namespace Microsoft.AspNetCore.Server.WebListener
|
||||||
public async Task AuthTypes_ChallengeAuthenticatedAuthType_Forbidden(AuthenticationSchemes authType)
|
public async Task AuthTypes_ChallengeAuthenticatedAuthType_Forbidden(AuthenticationSchemes authType)
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
using (Utilities.CreateHttpAuthServer(authType, out address, httpContext =>
|
using (Utilities.CreateHttpAuthServer(authType, DenyAnoymous, out address, httpContext =>
|
||||||
{
|
{
|
||||||
Assert.NotNull(httpContext.User);
|
Assert.NotNull(httpContext.User);
|
||||||
Assert.NotNull(httpContext.User.Identity);
|
Assert.NotNull(httpContext.User.Identity);
|
||||||
|
|
@ -454,7 +457,7 @@ namespace Microsoft.AspNetCore.Server.WebListener
|
||||||
public async Task AuthTypes_ChallengeAuthenticatedAuthTypeWithEmptyChallenge_Forbidden(AuthenticationSchemes authType)
|
public async Task AuthTypes_ChallengeAuthenticatedAuthTypeWithEmptyChallenge_Forbidden(AuthenticationSchemes authType)
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
using (Utilities.CreateHttpAuthServer(authType, out address, httpContext =>
|
using (Utilities.CreateHttpAuthServer(authType, DenyAnoymous, out address, httpContext =>
|
||||||
{
|
{
|
||||||
Assert.NotNull(httpContext.User);
|
Assert.NotNull(httpContext.User);
|
||||||
Assert.NotNull(httpContext.User.Identity);
|
Assert.NotNull(httpContext.User.Identity);
|
||||||
|
|
@ -477,7 +480,7 @@ namespace Microsoft.AspNetCore.Server.WebListener
|
||||||
public async Task AuthTypes_UnathorizedAuthenticatedAuthType_Unauthorized(AuthenticationSchemes authType)
|
public async Task AuthTypes_UnathorizedAuthenticatedAuthType_Unauthorized(AuthenticationSchemes authType)
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
using (Utilities.CreateHttpAuthServer(authType, out address, httpContext =>
|
using (Utilities.CreateHttpAuthServer(authType, DenyAnoymous, out address, httpContext =>
|
||||||
{
|
{
|
||||||
Assert.NotNull(httpContext.User);
|
Assert.NotNull(httpContext.User);
|
||||||
Assert.NotNull(httpContext.User.Identity);
|
Assert.NotNull(httpContext.User.Identity);
|
||||||
|
|
|
||||||
|
|
@ -38,22 +38,22 @@ namespace Microsoft.AspNetCore.Server.WebListener
|
||||||
internal static IServer CreateHttpServer(out string baseAddress, RequestDelegate app)
|
internal static IServer CreateHttpServer(out string baseAddress, RequestDelegate app)
|
||||||
{
|
{
|
||||||
string root;
|
string root;
|
||||||
return CreateDynamicHttpServer(string.Empty, AuthenticationSchemes.AllowAnonymous, out root, out baseAddress, app);
|
return CreateDynamicHttpServer(string.Empty, AuthenticationSchemes.None, true, out root, out baseAddress, app);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static IServer CreateHttpServerReturnRoot(string path, out string root, RequestDelegate app)
|
internal static IServer CreateHttpServerReturnRoot(string path, out string root, RequestDelegate app)
|
||||||
{
|
{
|
||||||
string baseAddress;
|
string baseAddress;
|
||||||
return CreateDynamicHttpServer(path, AuthenticationSchemes.AllowAnonymous, out root, out baseAddress, app);
|
return CreateDynamicHttpServer(path, AuthenticationSchemes.None, true, out root, out baseAddress, app);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static IServer CreateHttpAuthServer(AuthenticationSchemes authType, out string baseAddress, RequestDelegate app)
|
internal static IServer CreateHttpAuthServer(AuthenticationSchemes authType, bool allowAnonymous, out string baseAddress, RequestDelegate app)
|
||||||
{
|
{
|
||||||
string root;
|
string root;
|
||||||
return CreateDynamicHttpServer(string.Empty, authType, out root, out baseAddress, app);
|
return CreateDynamicHttpServer(string.Empty, authType, allowAnonymous, out root, out baseAddress, app);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static IServer CreateDynamicHttpServer(string basePath, AuthenticationSchemes authType, out string root, out string baseAddress, RequestDelegate app)
|
internal static IServer CreateDynamicHttpServer(string basePath, AuthenticationSchemes authType, bool allowAnonymous, out string root, out string baseAddress, RequestDelegate app)
|
||||||
{
|
{
|
||||||
lock (PortLock)
|
lock (PortLock)
|
||||||
{
|
{
|
||||||
|
|
@ -68,6 +68,7 @@ namespace Microsoft.AspNetCore.Server.WebListener
|
||||||
var server = new MessagePump(Options.Create(new WebListenerOptions()), new LoggerFactory());
|
var server = new MessagePump(Options.Create(new WebListenerOptions()), new LoggerFactory());
|
||||||
server.Features.Get<IServerAddressesFeature>().Addresses.Add(baseAddress);
|
server.Features.Get<IServerAddressesFeature>().Addresses.Add(baseAddress);
|
||||||
server.Listener.AuthenticationManager.AuthenticationSchemes = authType;
|
server.Listener.AuthenticationManager.AuthenticationSchemes = authType;
|
||||||
|
server.Listener.AuthenticationManager.AllowAnonymous = allowAnonymous;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
server.Start(new DummyApplication(app));
|
server.Start(new DummyApplication(app));
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,11 @@ namespace Microsoft.Net.Http.Server
|
||||||
{
|
{
|
||||||
public class AuthenticationTests
|
public class AuthenticationTests
|
||||||
{
|
{
|
||||||
|
private static bool AllowAnoymous = true;
|
||||||
|
private static bool DenyAnoymous = false;
|
||||||
|
|
||||||
[Theory]
|
[Theory]
|
||||||
[InlineData(AuthenticationSchemes.AllowAnonymous)]
|
[InlineData(AuthenticationSchemes.None)]
|
||||||
[InlineData(AuthenticationSchemes.Negotiate)]
|
[InlineData(AuthenticationSchemes.Negotiate)]
|
||||||
[InlineData(AuthenticationSchemes.NTLM)]
|
[InlineData(AuthenticationSchemes.NTLM)]
|
||||||
// [InlineData(AuthenticationSchemes.Digest)]
|
// [InlineData(AuthenticationSchemes.Digest)]
|
||||||
|
|
@ -21,21 +24,14 @@ namespace Microsoft.Net.Http.Server
|
||||||
public async Task AuthTypes_AllowAnonymous_NoChallenge(AuthenticationSchemes authType)
|
public async Task AuthTypes_AllowAnonymous_NoChallenge(AuthenticationSchemes authType)
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
using (var server = Utilities.CreateHttpAuthServer(authType | AuthenticationSchemes.AllowAnonymous, out address))
|
using (var server = Utilities.CreateHttpAuthServer(authType, AllowAnoymous, out address))
|
||||||
{
|
{
|
||||||
Task<HttpResponseMessage> responseTask = SendRequestAsync(address);
|
Task<HttpResponseMessage> responseTask = SendRequestAsync(address);
|
||||||
|
|
||||||
var context = await server.AcceptAsync();
|
var context = await server.AcceptAsync();
|
||||||
Assert.NotNull(context.User);
|
Assert.NotNull(context.User);
|
||||||
Assert.False(context.User.Identity.IsAuthenticated);
|
Assert.False(context.User.Identity.IsAuthenticated);
|
||||||
if (authType == AuthenticationSchemes.AllowAnonymous)
|
Assert.Equal(authType, context.Response.AuthenticationChallenges);
|
||||||
{
|
|
||||||
Assert.Equal(AuthenticationSchemes.None, context.Response.AuthenticationChallenges);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Assert.Equal(authType, context.Response.AuthenticationChallenges);
|
|
||||||
}
|
|
||||||
context.Dispose();
|
context.Dispose();
|
||||||
|
|
||||||
var response = await responseTask;
|
var response = await responseTask;
|
||||||
|
|
@ -53,7 +49,7 @@ namespace Microsoft.Net.Http.Server
|
||||||
public async Task AuthType_RequireAuth_ChallengesAdded(AuthenticationSchemes authType)
|
public async Task AuthType_RequireAuth_ChallengesAdded(AuthenticationSchemes authType)
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
using (var server = Utilities.CreateHttpAuthServer(authType, out address))
|
using (var server = Utilities.CreateHttpAuthServer(authType, DenyAnoymous, out address))
|
||||||
{
|
{
|
||||||
Task<HttpResponseMessage> responseTask = SendRequestAsync(address);
|
Task<HttpResponseMessage> responseTask = SendRequestAsync(address);
|
||||||
|
|
||||||
|
|
@ -73,7 +69,7 @@ namespace Microsoft.Net.Http.Server
|
||||||
public async Task AuthType_AllowAnonymousButSpecify401_ChallengesAdded(AuthenticationSchemes authType)
|
public async Task AuthType_AllowAnonymousButSpecify401_ChallengesAdded(AuthenticationSchemes authType)
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
using (var server = Utilities.CreateHttpAuthServer(authType | AuthenticationSchemes.AllowAnonymous, out address))
|
using (var server = Utilities.CreateHttpAuthServer(authType, AllowAnoymous, out address))
|
||||||
{
|
{
|
||||||
Task<HttpResponseMessage> responseTask = SendRequestAsync(address);
|
Task<HttpResponseMessage> responseTask = SendRequestAsync(address);
|
||||||
|
|
||||||
|
|
@ -100,7 +96,7 @@ namespace Microsoft.Net.Http.Server
|
||||||
| AuthenticationSchemes.NTLM
|
| AuthenticationSchemes.NTLM
|
||||||
/* | AuthenticationSchemes.Digest TODO: Not implemented */
|
/* | AuthenticationSchemes.Digest TODO: Not implemented */
|
||||||
| AuthenticationSchemes.Basic;
|
| AuthenticationSchemes.Basic;
|
||||||
using (var server = Utilities.CreateHttpAuthServer(authType | AuthenticationSchemes.AllowAnonymous, out address))
|
using (var server = Utilities.CreateHttpAuthServer(authType, AllowAnoymous, out address))
|
||||||
{
|
{
|
||||||
Task<HttpResponseMessage> responseTask = SendRequestAsync(address);
|
Task<HttpResponseMessage> responseTask = SendRequestAsync(address);
|
||||||
|
|
||||||
|
|
@ -126,7 +122,7 @@ namespace Microsoft.Net.Http.Server
|
||||||
public async Task AuthTypes_AllowAnonymousButSpecify401_Success(AuthenticationSchemes authType)
|
public async Task AuthTypes_AllowAnonymousButSpecify401_Success(AuthenticationSchemes authType)
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
using (var server = Utilities.CreateHttpAuthServer(authType | AuthenticationSchemes.AllowAnonymous, out address))
|
using (var server = Utilities.CreateHttpAuthServer(authType, AllowAnoymous, out address))
|
||||||
{
|
{
|
||||||
Task<HttpResponseMessage> responseTask = SendRequestAsync(address, useDefaultCredentials: true);
|
Task<HttpResponseMessage> responseTask = SendRequestAsync(address, useDefaultCredentials: true);
|
||||||
|
|
||||||
|
|
@ -157,7 +153,7 @@ namespace Microsoft.Net.Http.Server
|
||||||
public async Task AuthTypes_RequireAuth_Success(AuthenticationSchemes authType)
|
public async Task AuthTypes_RequireAuth_Success(AuthenticationSchemes authType)
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
using (var server = Utilities.CreateHttpAuthServer(authType, out address))
|
using (var server = Utilities.CreateHttpAuthServer(authType, DenyAnoymous, out address))
|
||||||
{
|
{
|
||||||
Task<HttpResponseMessage> responseTask = SendRequestAsync(address, useDefaultCredentials: true);
|
Task<HttpResponseMessage> responseTask = SendRequestAsync(address, useDefaultCredentials: true);
|
||||||
|
|
||||||
|
|
@ -177,7 +173,7 @@ namespace Microsoft.Net.Http.Server
|
||||||
public async Task AuthTypes_RequireKerberosAuth_Success()
|
public async Task AuthTypes_RequireKerberosAuth_Success()
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
using (var server = Utilities.CreateHttpAuthServer(AuthenticationSchemes.Kerberos, out address))
|
using (var server = Utilities.CreateHttpAuthServer(AuthenticationSchemes.Kerberos, DenyAnoymous, out address))
|
||||||
{
|
{
|
||||||
Task<HttpResponseMessage> responseTask = SendRequestAsync(address, useDefaultCredentials: true);
|
Task<HttpResponseMessage> responseTask = SendRequestAsync(address, useDefaultCredentials: true);
|
||||||
|
|
||||||
|
|
@ -197,7 +193,7 @@ namespace Microsoft.Net.Http.Server
|
||||||
public async Task MultipleAuthTypes_KerberosAllowAnonymousButSpecify401_ChallengesAdded()
|
public async Task MultipleAuthTypes_KerberosAllowAnonymousButSpecify401_ChallengesAdded()
|
||||||
{
|
{
|
||||||
string address;
|
string address;
|
||||||
using (var server = Utilities.CreateHttpAuthServer(AuthenticationSchemes.Kerberos | AuthenticationSchemes.AllowAnonymous, out address))
|
using (var server = Utilities.CreateHttpAuthServer(AuthenticationSchemes.Kerberos, AllowAnoymous, out address))
|
||||||
{
|
{
|
||||||
Task<HttpResponseMessage> responseTask = SendRequestAsync(address);
|
Task<HttpResponseMessage> responseTask = SendRequestAsync(address);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,10 +14,11 @@ namespace Microsoft.Net.Http.Server
|
||||||
private static int NextPort = BasePort;
|
private static int NextPort = BasePort;
|
||||||
private static object PortLock = new object();
|
private static object PortLock = new object();
|
||||||
|
|
||||||
internal static WebListener CreateHttpAuthServer(AuthenticationSchemes authScheme, out string baseAddress)
|
internal static WebListener CreateHttpAuthServer(AuthenticationSchemes authScheme, bool allowAnonymos, out string baseAddress)
|
||||||
{
|
{
|
||||||
var listener = CreateHttpServer(out baseAddress);
|
var listener = CreateHttpServer(out baseAddress);
|
||||||
listener.AuthenticationManager.AuthenticationSchemes = authScheme;
|
listener.AuthenticationManager.AuthenticationSchemes = authScheme;
|
||||||
|
listener.AuthenticationManager.AllowAnonymous = allowAnonymos;
|
||||||
return listener;
|
return listener;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue