Asp.net core 2.0. Cookie-аутентификация в изоморфном извлечении бесконечный цикл
У меня есть небольшое базовое приложение asp.net с веб-сайтом act.js, которое аутентифицирует пользователей с помощью куки-аутентификации. Кажется, аутентификация cookie работает нормально, когда я напрямую вызываю действия контроллера.
Например, если я наберу http://localhost/Test/Index, он будет работать как положено. Выполняется аутентификация, создается cookie, и в последних запросах он использует cookie.
Однако, когда мой реагирующий компонент вызывает метод контроллера, использующий isomorphic-fetch, он превращается в бесконечный цикл аутентификации.
[Authorize(AuthenticationSchemes = CookieAuthenticationDefaults.AuthenticationScheme)]
public class TestController : Controller
{
public IActionResult Index()
{
return View();
}
}
Вот мой startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddOptions();
services.AddAuthentication(o =>
{
o.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
o.DefaultAuthenticateScheme =
CookieAuthenticationDefaults.AuthenticationScheme;
o.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
options.ExpireTimeSpan = TimeSpan.FromMinutes(19);
options.AccessDeniedPath = "/Account/Forbidden/";
options.LoginPath = "/Account/Login/";
});
Вот где я аутентифицирую пользователя.(AccountController/Login)
var claims = new[]
{
new Claim(ClaimTypes.Name,userName),
new Claim("AccessToken", string.Format("Bearer {0}", token.AccessToken))
};
ClaimsIdentity userIdentity = new ClaimsIdentity(claims,CookieAuthenticationDefaults.AuthenticationScheme);
ClaimsPrincipal principal = new ClaimsPrincipal(userIdentity);
await HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
principal,new AuthenticationProperties{ IsPersistent=true});
return RedirectToAction("Index", "Home");
Вот мой метод извлечения, который создает бесконечный цикл входа в систему.
export class ProposalGrid extends React.Component<RouteComponentProps<{}>, FetchDataExampleState> {
constructor(props: RouteComponentProps<{}>) {
super(props);
this.pageChange = this.pageChange.bind(this);
this.state = { proposalDatas: [], loading: true, dataState: { take: 10, skip: 0 } };
let url = "ProposalData/GetProposals?" + $.param({ take: 10, skip: 0 })
fetch(url)
.then(response => response.json() as Promise<ProposalData[]>)
.then(data => {
this.setState({ proposalDatas: data, loading: false });
});
}
1 ответ
Я включил учетные данные при получении данных и изменил метод на post.Проблема исчезла.
fetch(url, {
method: 'POST',
credentials: 'include',