【发布时间】:2017-12-11 02:23:26
【问题描述】:
我有一个使用 google auth 验证 Google id 令牌的 C# 后端控制器方法。它在部署到我的测试服务器后开始工作,但过了一段时间,它遇到了死锁情况(我相信)。没有错误,它只是挂在 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;
}
到目前为止没有任何效果。
感谢任何帮助。
【问题讨论】:
-
只是猜测您在调试时遇到了麻烦,因为异步调用 ValidateAsync 可能失败或挂起。您可以使用 Sync 方法调用进行测试吗?
-
我认为该方法没有同步版本(来自谷歌)。或者您是在问我是否尝试使用 Sync 函数调用包装 Async 方法?
-
是的。仅用于调试目的。
-
并且(显然)不要等待异步调用(对谷歌)
-
运气好吗?你能调试吗?
标签: c# asp.net async-await google-identity