Реализация OAuth в asp.net ошибка с context.RunClaimsAction (пользователь) - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь реализовать oauth в asp.net 3.0, и я понимаю, что произошли некоторые изменения в отношении изменений типов Newtonsoft.Json, замененных в Microsoft.AspNetCore.Authentication API ссылка здесь

Он не принимает JObject утверждений пользователя и выдает ошибку при попытке передать JObject в качестве параметра RunClaimActions (пользователь) и не выдает ошибку при запуске метода без передачи пользователя JObjectпараметр в методе.В результате он не возвращает претензии пользователя к представлению.Кто-нибудь еще сталкивался с этой проблемой?Есть ли способ конвертировать newtonsoft JObject в JsonElement.

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);



                    }


                };
            });

1 Ответ

0 голосов
/ 27 сентября 2019

После некоторого чтения я решил проблему, используя JsonDocument для анализа заявок и передачи корневого документа в метод RunClaimActions.

    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 = JsonDocument.Parse(await response.Content.ReadAsStringAsync());                                              
                        context.RunClaimActions(user.RootElement);



                    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...