#asp.net-core-mvc #google-authentication #facebook-authentication #asp.net-core-2.2
#asp.net-core-mvc #google-аутентификация #facebook-аутентификация #asp.net-core-2.2
Вопрос:
Я разрабатываю веб-приложение с ASP.NET Core MVC 2.2 и я хочу получить дополнительную информацию от пользователя с помощью facebook и аутентификации Google / входа в систему.
На самом деле аутентификация через facebook и Google работает, но просто дайте мне некоторую информацию об имени пользователя. Мне нужна дата рождения и изображение профиля пользователя. Как я могу это сделать?
Когда я пытаюсь выполнить аутентификацию facebook, я перенаправляюсь на следующий URL: https://www.facebook.com/v3.1/dialog/oauth?client_id=2255814967787552amp;scope=email,https://www.facebook.com/dialog/oauthamp;response_type=codeamp;redirect_uri=https://localhost:44381/signin-facebookamp;state=CfDJ8D6zBetw7iFAjlSqmbgb4YDXGCqkP9eC0ywTHzwmmZ_KjSgwprhdP-TuZpZheevTP90ZlwtBXWr1DkVvsOJe842onEdxPxNMFuEz0yg8HtFZSvQwfFOT4E46EHkM7s0xWPh_VwFy6BQVvtDL7BrtBtTssvAuu7zdCcX7kgLAb6YWuAQUUSx6ocbcRwQVKd-Gg9bwBVmtyVQfFXVLJAMkbTEMsR4ajeibSM558iggvPIzct-SYu-hOu474PFDMmG9iB9JNkSytsXSRltjSrIT0clmbrahqQbmLL8Pa-IM33Gl
Когда я пытаюсь выполнить аутентификацию Google, это работает, но тип утверждения отсутствует во внешнем источнике информации для входа..
И я не знаю, как получить изображение профиля пользователя..
Мой запуск:
services.AddAuthentication()
.AddFacebook(facebookOptions =>
{
facebookOptions.AppId = Configuration["Authentication:Facebook:AppId"];
facebookOptions.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
facebookOptions.Scope.Add("https://www.facebook.com/dialog/oauth");
facebookOptions.Fields.Add(ClaimTypes.GivenName);
facebookOptions.Fields.Add(ClaimTypes.Surname);
facebookOptions.Fields.Add(ClaimTypes.DateOfBirth);
facebookOptions.ClaimActions.MapJsonKey(ClaimTypes.GivenName, "givenname");
facebookOptions.ClaimActions.MapJsonKey(ClaimTypes.Surname, "surname");
facebookOptions.ClaimActions.MapJsonKey(ClaimTypes.DateOfBirth, "dateofbirth");
})
.AddGoogle(googleOptions =>
{
googleOptions.ClientId = Configuration["Authentication:Google:ClientId"];
googleOptions.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
googleOptions.Scope.Add("https://www.googleapis.com/auth/plus.login");
googleOptions.ClaimActions.MapJsonKey(ClaimTypes.GivenName, "givenname");
googleOptions.ClaimActions.MapJsonKey(ClaimTypes.Surname, "surname");
googleOptions.ClaimActions.MapJsonKey(ClaimTypes.DateOfBirth, "dateofbirth");
});
Комментарии:
1. Вам необходимо запросить дополнительные области и / или использовать токен аутентификации, чтобы вручную запросить необходимую информацию из соответствующих API. Электронная почта должна быть общедоступной в определенной области; вам нужно обратиться к соответствующей документации каждой службы, чтобы определить точную требуемую область. День рождения может быть доступен как область видимости, а может и не быть доступен даже через запросы API, в зависимости от настроек конфиденциальности пользователя, поскольку технически это PII. Для чего-то вроде изображения профиля обычно требуется дополнительный запрос API. Это просто зависит.
2. В общем, обратитесь к документации API для каждой службы. Интеграция аутентификации в ASP.NET Ядро не является всеобъемлющей интеграцией с API. Это просто OAuth / OIDC и любая информация, которую вы можете получить через этот поток через области видимости.
Ответ №1:
Область, необходимая для даты рождения, является: https://www.googleapis.com/auth/user.birthday.read
. Вы можете обратиться к документации Google Здесь, чтобы получить список любой области oauth2, необходимой для всех API Google.
Однако, пожалуйста, обратите внимание, что для получения информации о дате рождения вам нужно вручную сделать авторизованный запрос (то есть: включить токен baerer, который имеет требуемую область в заголовке авторизации) в Google People API, как описано Здесь. Это потому, что текущая реализация в AspNetCore для GoogleAuth извлекает свои утверждения аутентификации из конечной точки Google userInfo (https://www.googleapis.com/oauth2/v2/userinfo ), который вообще не предоставляет информацию о дне рождения, даже для авторизованного запроса, поэтому простое добавление области рождения в GoogleOptions.Scope
в AddGoogle(...)
методе при настройке аутентификации Google для вашего приложения все равно не восстановит для вас день рождения.