Я пытаюсь разработать собственный веб-приложение OWIN. Все хорошо, пока я не попытался интегрировать проверку подлинности Windows (NTLM). Проверка подлинности Windows работает нормально, если активирована только встроенная проверка подлинности Windows. Но мне нужно, чтобы некоторые запросы оставались анонимными.
Я уже обнаружил, что должен включить оба метода аутентификации:
AuthenticationSchemes.IntegratedWindowsAuthentication | AuthenticationSchemes.Anonymous
Но в таком случае я получаю «Авторизация была отклонена для этого запроса». Протестировано с Chrome в качестве клиента (http://localhost:9009/api/test).
Пожалуйста, помогите.
Класс запуска OWIN:
public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
// Enable Windows & Anonymous Authentification
HttpListener listener = (HttpListener)appBuilder.Properties["System.Net.HttpListener"];
listener.AuthenticationSchemes =
AuthenticationSchemes.IntegratedWindowsAuthentication | AuthenticationSchemes.Anonymous;
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}"
);
appBuilder.UseWebApi(config);
}
}
Основная программа:
static void Main()
{
string baseAddress = "http://localhost:9009/";
// Start OWIN host
using (WebApp.Start<Startup>(url: baseAddress))
{
Console.WriteLine("Server ready");
Console.ReadLine();
}
}
Тестовый контроллер:
using System.Collections.Generic;
using System.Security.Principal;
using System.Web.Http;
namespace SelfhostNTAuth
{
public class TestController : ApiController
{
[Authorize]
public IEnumerable<string> Get()
{
WindowsPrincipal user = RequestContext.Principal as WindowsPrincipal;
if (user == null)
{
return new string[] { "unauthorized"};
}
else
{
return new string[] { user.Identity.AuthenticationType, user.Identity.Name };
}
}
}
}