Asp.net core 2.0. Cookie-аутентификация в изоморфном извлечении бесконечный цикл - PullRequest
0 голосов
/ 21 мая 2018

У меня есть небольшое приложение на ядре asp.net, которое реагирует на пользователей с использованием cookie-аутентификации.Кажется, что 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 Ответ

0 голосов
/ 01 июня 2018

Я включил учетные данные при получении данных и изменил метод на post.Проблема исчезла.

fetch(url, {
    method: 'POST',
    credentials: 'include',
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...