0

我有一个 C# 后端控制器方法,它使用 google auth 验证 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;
}

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

任何帮助表示赞赏。

4

1 回答 1

0

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

于 2017-12-31T03:04:46.467 回答