github авторизация state Exceptions

119
15 ноября 2019, 07:20

Startup:

        services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = "GitHub";
        })
        .AddCookie()
        .AddOAuth("GitHub", options =>
        {
            options.ClientId = Configuration["GitHub:ClientId"];
            options.ClientSecret = Configuration["GitHub:ClientSecret"];
            options.CallbackPath = new PathString("/api/Account/SignInGithub");
            options.AuthorizationEndpoint = "https://github.com/login/oauth/authorize";
            options.TokenEndpoint = "https://github.com/login/oauth/access_token";
            options.UserInformationEndpoint = "https://api.github.com/user";
            options.ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "id");
            options.ClaimActions.MapJsonKey(ClaimTypes.Name, "name");
            options.ClaimActions.MapJsonKey("urn:github:login", "login");
            options.ClaimActions.MapJsonKey("urn:github:url", "html_url");
            options.ClaimActions.MapJsonKey("urn:github:avatar", "avatar_url");
            options.Events = new OAuthEvents
            {
                OnCreatingTicket = async context =>
                {
                    var request = new HttpRequestMessage(HttpMethod.Get, context.Options.UserInformationEndpoint);
                    request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", context.AccessToken);
                    var response = await context.Backchannel.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, context.HttpContext.RequestAborted);
                    response.EnsureSuccessStatusCode();
                    var user = JObject.Parse(await response.Content.ReadAsStringAsync());
                    context.RunClaimActions(user);
                    return;
                }
            };
        });

Выбираю провайдер:

    [HttpGet("api/[controller]/Login/{provider?}")]
    public async Task<IActionResult> Login(string provider = "GitHub")
    {
        return Challenge(provider);
    }

Коллбек:

    [HttpGet("api/Account/SignInGithub")]
    public async Task<IActionResult> SignInGithub2(string code)
    {
        return Ok();
    }

Настройке в гите:

Как щас

Исходник на всякий

Вопросы:

1) Почему после того как подтвердил свой логин в гите не происходит редирект? 2) Пробуем получить колбек с постмена и видим ошибку касающуюся поля state, почему:

3) В startup.cs есть event OnCreatingTicket в нем user определяется верно. Как мне его записать в БД?

READ ALSO
Ошибка MonoGame Visual Studio

Ошибка MonoGame Visual Studio

monogame Отсутствует подтип проектаПодтип "{6D335F3A-9D43-41b4-9D22-F6F17C4BE596}" не поддерживается в этой копии программы

137
Как вызвать обработчик PropertyChanged из другого потока

Как вызвать обработчик PropertyChanged из другого потока

Из ViewModel оформлена подписка на события класса C1В классе C1 запущен асинхронный метод, в процессе работы которого генерируются события

155
Проблема с двойным прыжком на Unity

Проблема с двойным прыжком на Unity

у меня есть проблема с игрой на UnityЯ решил сделать небольшую игру типа платформера, есть проблема с прыжком, если очень много раз нажимать...

153
Кастомный шрифт 2

Кастомный шрифт 2

Нашёл ответ на свой вопрос, вродь) Вот https://stackoverflowcom/questions/1297264/using-custom-fonts-on-a-label-on-winforms

144