Google 令牌验证调用陷入僵局?

Google token verification call deadlocked?

我有一个 C# 后端控制器方法,它使用 google 身份验证验证 Google id 令牌。它在部署到我的测试服务器后首先工作,但过了一会儿,它遇到了死锁情况(我相信)。没有报错,只是挂在了VerifyGoogleToken。

using Google.Apis.Auth;
using Google.Apis.Auth.OAuth2;

    [HttpPost]
    public async Task<string> VerifyGoogleToken(string Token)
    {
        var verifyUser = Task.Run(() => VerifyToken(Token).Result);
        await Task.WhenAll(verifyUser);
        string returnValue = verifyUser.Result.ToString();
        return returnValue;
    }

    private async Task<string> VerifyToken(string Token)
    {
        string ReturnValue = "InvalidToken";
        GoogleJsonWebSignature.Payload payload = await GoogleJsonWebSignature.ValidateAsync(Token);
        if (payload.HostedDomain == "mydomain.com" && payload.EmailVerified == true && payload.Audience.ToString() == ClientID && (payload.Issuer == "accounts.google.com" || payload.Issuer == "https://accounts.google.com"))
        {
            ReturnValue = "ValidToken";
        }
        return ReturnValue;
    }

我也试过这个:

[HttpPost]
public async Task<string> VerifyGoogleToken(string Token)
{
    string returnValue = await VerifyToken(Token)
    return returnValue;
}

private async Task<string> VerifyToken(string Token)
{
    string ReturnValue = "InvalidToken";
    GoogleJsonWebSignature.Payload payload = await GoogleJsonWebSignature.ValidateAsync(Token);
    if (payload.HostedDomain == "mydomain.com" && payload.EmailVerified == true && payload.Audience.ToString() == ClientID && (payload.Issuer == "accounts.google.com" || payload.Issuer == "https://accounts.google.com"))
    {
        ReturnValue = "ValidToken";
    }
    return ReturnValue;
}

还有这个:

[HttpPost]
public string VerifyGoogleToken(string Token)
{
    string returnValue = VerifyToken(Token);
    return returnValue;
}

private async Task<string> VerifyToken(string Token)
{
    string ReturnValue = "InvalidToken";
    GoogleJsonWebSignature.Payload payload = await GoogleJsonWebSignature.ValidateAsync(Token);
    if (payload.HostedDomain == "mydomain.com" && payload.EmailVerified == true && payload.Audience.ToString() == ClientID && (payload.Issuer == "accounts.google.com" || payload.Issuer == "https://accounts.google.com"))
    {
        ReturnValue = "ValidToken";
    }
    return ReturnValue;
}

到目前为止没有任何效果。

感谢任何帮助。

我相信您可以调用验证的次数是有限制的,但我不完全知道这个限制。我的代码过去每 30 秒调用一次验证来做一些事情,比如获取用户的 ID/email 等。这个设置在几个小时后停止工作。由于我重写了每个连接只调用验证几次的代码,因此验证一直在正常工作。