Сохранить дополнительные сведения о претензиях от внешнего поставщика - PullRequest
0 голосов
/ 05 апреля 2020

Мы пробуем внешний вход в систему (Identityserver4) в. NET Ядро, и мы использовали внешнего провайдера, т.е. Google. мы можем получить данные, такие как имя, фамилия, адрес электронной почты и т. д. c пользователя Google, во время входа в систему. Но мы не можем получить номер телефона пользователя и другие дополнительные претензии.

Startup.Auth.cs:

            services.AddAuthentication().AddGoogle("Google", options =>
        {
            options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
            options.ClientId = "XXX";
            options.ClientSecret = "XXX";
            options.UserInformationEndpoint = "https://www.googleapis.com/oauth2/v2/userinfo";
            options.ClaimActions.MapJsonKey(ClaimTypes.OtherPhone, "otherphone");
            options.ClaimActions.MapJsonKey("urn:google:picture", "picture", "url");
            options.ClaimActions.MapJsonKey("urn:google:locale", "locale", "string");
            options.ClaimActions.MapJsonKey("urn:google:MobilePhone", "mobilephone", "string");
            options.ClaimActions.MapJsonKey("urn:google:gender", "gender", "string");
            options.ClaimActions.MapJsonKey("urn:google:birthday", "birthday", "date");
            options.ClaimActions.MapJsonKey("urn:google:accesstoken", "AccessToken", "string");
            options.ClaimActions.MapJsonKey(ClaimTypes.Gender, "gender");
            options.SaveTokens = true;

        });

Мы добавили options.ClaimActions.MapJsonKey("urn:google:MobilePhone", "mobilephone", "string"); эту строку, но мы не получаем номер мобильного телефона. Та же самая строка кода работает для картинки, но для мобильного номера не работает.

1 Ответ

0 голосов
/ 06 апреля 2020

мы попытались использовать авторизацию Google API и получили следующую информацию:

{
  "id": "xxx",
  "email": "xx@gmail.com",
  "verified_email": true,
  "name": "PoojaParmar",
  "given_name": "Pooja",
  "family_name": "Parmar",
  "picture": "/photo.jpg",
  "locale": "en"
}

Но нам нужен номер мобильного телефона пользователя Google. Ниже приведена строка кода, которую мы настроили в наших методах действия:

var result = await HttpContext.AuthenticateAsync(IdentityServerConstants.ExternalCookieAuthenticationScheme);
                var claims = result.Principal.Claims.ToList();
                string accessToken = result.Properties.Items[".Token.access_token"];
                var web = new WebClient
                {
                    Encoding = System.Text.Encoding.UTF8
                };
                try
                {
                    var response = web.DownloadString("https://www.googleapis.com/oauth2/v1/userinfo?access_token=" + accessToken + "&scope=" + HttpUtility.UrlEncode("https://www.googleapis.com/auth/userinfo.profile"));
                }
                catch (System.Exception ex)
                {
                    //return;
                }
...