【问题标题】:Persist additional claims details from external provider保留来自外部提供商的其他索赔详细信息
【发布时间】:2020-07-17 06:07:57
【问题描述】:

我们正在 .NET Core 中尝试外部登录 (Identityserver4),并且我们使用了外部提供商,即 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"); 这一行,但我们没有收到手机号码。同一行代码适用于图片,但手机号码无效。

【问题讨论】:

标签: asp.net-core .net-core oauth-2.0 identityserver4


【解决方案1】:

我们已经尝试使用google API授权并获得以下信息:

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

但我们需要登录谷歌用户的手机号码。下面是我们在动作方法中配置的代码行:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多