Мы создали проект веб-api, в котором мы использовали базовую аутентификацию на время. Мы использовали пакет nuget для создания справочной документации по Web Api, поэтому он добавил новую область, контроллер и представления для справки Web Api. Мы разместили веб-api на IIS. Прямо сейчас, любой может просматривать веб-помощь Api, просто просматривая веб-адрес Api «». Мы хотим аутентифицировать страницы справки (которые реализованы в MVC). Вопрос здесь в моем веб-api использует базовую аутентификацию, и я хочу создать механизм, чтобы справка web api была аутентифицирована перед любым запросом на страницу справки Web Api.Поместите документацию Web Api за страницу входа, чтобы только действительный пользователь мог просматривать справочную документацию по Web Api
Для этого я создал страницу «AccountController», «Login». Я также создал фильтр проверки подлинности и украсил «HelpController» (который имеет все действия для предоставления страниц справки). Логина Код страницы:
public ActionResult Login(LoginViewModel model)
{
bool isValidated = //Code for validating the users
if (ModelState.IsValid && isValidated)
{
var identity = new HelpAuthenticationIdentity(model.UserName, model.Password);
var principal = new WindowsPrincipal(identity);
ControllerContext.HttpContext.User = principal;
return RedirectToAction("Index", "Help", new { area = "HelpPage" });
}
else
return View();
}
Я создал класс для идентичности, который наследует класс WindowsIdentity
public class HelpAuthenticationIdentity : WindowsIdentity
{
public HelpAuthenticationIdentity(string userName, string password)
: base(userName, "Basic")
{
this.Password = password;
}
public string Password { get; set; }
}
Когда я нажимаю на вход после ввода действительных учетных данных, то он будет перенаправлен на Индекс действия от Помощь контроллер. Поскольку у меня есть фильтр аутентификации, он сначала вызовет метод «OnAuthentication». Здесь он всегда получает флаг «context.HttpContext.User.Identity.IsAuthenticated» как false. Атрибут фильтра аутентификации выглядит следующим образом:
/// <summary>
/// Authentication filter to authenticate the request for Web Api Help
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]
public class HelpAuthenticationAttribute : ActionFilterAttribute, IAuthenticationFilter
{
public void OnAuthentication(AuthenticationContext context)
{
if (!context.HttpContext.User.Identity.IsAuthenticated)
{
context.Result = new HttpUnauthorizedResult();
}
}
public void OnAuthenticationChallenge(AuthenticationChallengeContext context)
{
if(context.Result == null || context.Result is HttpUnauthorizedResult)
{
context.Result = new RedirectToRouteResult("Login",
new System.Web.Routing.RouteValueDictionary{
{"controller", "Account"},
{"action", "Login"}
});
}
}
}
Просьба представить ваши данные.