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 等。这个设置在几个小时后停止工作。由于我重写了每个连接只调用验证几次的代码,因此验证一直在正常工作。
我有一个 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 等。这个设置在几个小时后停止工作。由于我重写了每个连接只调用验证几次的代码,因此验证一直在正常工作。