#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 работать