Сценарий:Использование Cookies на основе аутентификации в WebAPI и основные asp.net
У меня есть решение, в котором я есть и WebAPI и проект Asp.Net MVC сердечника. Я реализовал аутентификацию на основе файлов cookie в WebAPI. Он отлично работает при тестировании с помощью Postman. Но когда я использую службу WebAPI из моего проекта MVC, аутентификация, похоже, нарушена.
Вот мой код:
WebAPI:
Startup.cs
app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
AuthenticationScheme = "ApiAuth",
AutomaticAuthenticate = true,
AutomaticChallenge = false
});
AccountController.cs
[HttpPost]
[Route("authenticate")]
public IActionResult Authenticate([FromBody]LoginModel login)
{
if (_accountManager.Authenticate(login))
{
var identity = new ClaimsIdentity("password");
identity.AddClaim(new Claim(ClaimTypes.Role, "User"));
HttpContext.Authentication.SignInAsync("ApiAuth", new ClaimsPrincipal(identity)).Wait();
}
else
{
return Unauthorized();
}
return Ok(_accountManager.Authenticate(login));
}
Все контроллеры имеют этот атрибут [Authorize(Roles = "User")]
MVC App:
AccountController.cs
public async Task<IActionResult> Login(LoginModel loginModel)
{
var loginFlag = false;
HttpResponseMessage response = await ServiceCall<LoginModel>.postData(URLPREFIX + "/authenticate", loginModel);
if (response.IsSuccessStatusCode)
{
loginFlag = await response.Content.ReadAsAsync<bool>();
}
if (loginFlag)
{
return RedirectToAction("Index", "Home");
}
else
{
return View();
}
}
ServiceCall.cs:
public static class ServiceCall<T>
{
static HttpClient client = new HttpClient();
const string HTTP_BASE = "http://localhost:13359/";
public static async Task<HttpResponseMessage> postData(string Url, T data)
{
HttpResponseMessage response = null;
StringContent content = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json");
client.BaseAddress = new Uri(HTTP_BASE);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
response = await client.PostAsync(Url, content);
return response;
}
}
Вот мой Скриншот:
Функция Войти как в WebAPI и MVC выполняется правильно, но при переходе на главную страницу, я не мог потреблять услугу. Любые советы будут полезны. Благодарю.
Update # 1:
Вот my project repo с этим вопросом. Взгляни, пожалуйста. Благодаря
Спасибо за ответ. Можете ли вы дать мне пример кода? –
Я не отвечаю на ваш код клиента, и если ваше приложение webapi и mvc на другом сервере (если это правда, вы не можете использовать аутентификацию api в приложении), во многих примерах вы можете сделать это самостоятельно, вам нужно понять это, а не кто-то писать для тебя. – Bucketcode
Спасибо, мой друг. Я обновил свой вопрос с помощью моей программы ServiceCall. Единственным новым запросом, который я использую, является 'static HttpClient client = new HttpClient();'. Можно ли использовать один и тот же HttpClient без создания нового? –