Как я могу подключиться к внешнему серверу аутентификации с ASP.NET Ядро на C#

#c# #asp.net-core #authentication

#c# #asp.net-core #аутентификация

Вопрос:

Я пытаюсь пройти аутентификацию с помощью ASP.NET Ядро использует Google API, чтобы иметь доступ к people API.

У меня есть следующий код:

  services.AddAuthentication()
           .AddOpenIdConnect(GoogleDefaults.AuthenticationScheme,
               GoogleDefaults.DisplayName,
               options =>
               {
                   options.Authority = "https://accounts.google.com/o/oauth2/v2/auth";
                   options.ClientId = Configuration["Authentication:Google:ClientId"];
                   options.ClientSecret = Configuration["Authentication: Google:ClientSecret"];
                   options.ResponseType = OpenIdConnectResponseType.Code;
                   options.Scope.Add("openid");
                   options.Scope.Add("email");
                   options.CallbackPath = "/signin-google";
               });
  

Проблема в том, что я получаю следующее исключение

При обработке запроса произошло необработанное исключение.
Исключение IOException: IDX20807: не удается получить документ из: ‘[PII скрыт. Для получения более подробной информации см. https://aka.ms/IdentityModel/PII .]’. HttpResponseMessage: ‘[PII скрыт. Для получения более подробной информации см. https://aka.ms/IdentityModel/PII .]’, HttpResponseMessage.Содержимое: ‘[PII скрыт. Для получения более подробной информации см. https://aka.ms/IdentityModel/PII .]’

Как я могу решить эту проблему?

Второй вопрос: как я могу получить доступ к токену доступа с контроллера, чтобы иметь возможность отправлять запросы в People API?

С наилучшими пожеланиями, Майк

Комментарии:

1. итак, вы переходите по ссылке из исключения?

Ответ №1:

[о том, как получить доступ к пользователю в контроллере]

Используете ли вы токен JWT? если это так, я получаю к нему доступ с помощью:

 this.HttpContext.User;
  

затем, если вы еще не изменили это, полезная нагрузка jwt разделяется на несколько утверждений. В моем случае по умолчанию токен отслеживает состояние (что означает, что в нем содержится информация о пользователе), а идентификатор пользователя был сохранен в пятом утверждении

 .Claims.ToList()[5].Value;
  

Комментарии:

1. Привет, Красный, спасибо за твой ответ. Я не настраиваю токен jwt. Как я могу это сделать?

2. Я использовал шаблон по умолчанию для SPA (одностраничное приложение, mvc с react или angular), и по умолчанию установлена аутентификация на предъявителя токена с использованием jwt. Вы делаете то же самое?

3. Привет @Red, нет, я использую технологию mvc razor pages. Там по умолчанию аутентификация не реализована.

4. developers.google.com/identity/protocols/oauth2/openid-connect Я думаю, что по умолчанию это jwt, попробуйте получить доступ к пользователю HttpContext и посмотреть, что он говорит в поле претензий Редактировать: но теперь я помню, что вы все еще не можете заставить OAuth работать