gpt4 book ai didi

jwt - 来自 Google 的 ID token 中的 email_verified = false

转载 作者:行者123 更新时间:2023-12-01 23:08:07 49 4
gpt4 key购买 nike

我用 Google ID tokens让用户登录我的网络服务。作为验证从 Google 收到的 token 的一部分,网络服务会检查 email_verified = true在 token 的有效载荷中。

我的一些用户 signed up for a Google-account使用他们的非 Gmail、非 Google Apps 电子邮件地址。他们确实点击了谷歌在注册后发送给他们的电子邮件中的链接,以验证他们的电子邮件地址。

当这些用户尝试登录我的网络服务时,我收到 email_verified = false在 token 的有效载荷中。

这是什么意思,我可以/应该在验证 token 时忽略这一点吗?

最佳答案

有几个不同的 ways您可以在其中验证服务器端 ID token 的完整性:

  • “手动” - 不断下载 Google 的公钥,验证签名,然后验证每个字段,包括 iss一;我在这里看到的主要优势(尽管在我看来很小)是您可以最大限度地减少发送到 Google 的请求数量。
  • “自动” - 在 Google 的端点上执行 GET 以验证此 token https://www.googleapis.com/oauth2/v3/tokeninfo?id_token={0}
  • 使用 Google API 客户端库 - 如 official one .

  • 这是它的样子:

    private const string GoogleApiTokenInfoUrl = "https://www.googleapis.com/oauth2/v3/tokeninfo?id_token={0}";

    public ProviderUserDetails GetUserDetails(string providerToken)
    {
    var httpClient = new MonitoredHttpClient();
    var requestUri = new Uri(string.Format(GoogleApiTokenInfoUrl, providerToken));

    HttpResponseMessage httpResponseMessage;
    try
    {
    httpResponseMessage = httpClient.GetAsync(requestUri).Result;
    }
    catch (Exception ex)
    {
    return null;
    }

    if (httpResponseMessage.StatusCode != HttpStatusCode.OK)
    {
    return null;
    }

    var response = httpResponseMessage.Content.ReadAsStringAsync().Result;
    var googleApiTokenInfo = JsonConvert.DeserializeObject<GoogleApiTokenInfo>(response);

    if (!SupportedClientsIds.Contains(googleApiTokenInfo.aud))
    {
    Log.WarnFormat("Google API Token Info aud field ({0}) not containing the required client id", googleApiTokenInfo.aud);
    return null;
    }

    return new ProviderUserDetails
    {
    Email = googleApiTokenInfo.email,
    FirstName = googleApiTokenInfo.given_name,
    LastName = googleApiTokenInfo.family_name,
    Locale = googleApiTokenInfo.locale,
    Name = googleApiTokenInfo.name,
    ProviderUserId = googleApiTokenInfo.sub
    };
    }

    关于jwt - 来自 Google 的 ID token 中的 email_verified = false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40839788/

    49 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com