2017-12-11 8 views
0

Google 인증을 사용하여 Google ID 토큰을 확인하는 C# 백엔드 컨트롤러 메소드가 있습니다. 그것은 내 테스트 서버에 배포 한 후 처음에는 작동하지만 잠시 후 교착 상태에 빠집니다. 오류가 없으며 VerifyGoogleToken에 멈춰 있습니다. 또한이Google 토큰 확인 통화가 교착 상태입니까?

[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; 
} 

아무것도 지금까지 근무

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; 
    } 

또한 단지이 시도.

도움을 주시면 감사하겠습니다.

+0

비동기 호출 ValidateAsync가 실패하거나 중단 될 수 있으므로 디버깅하는 데 문제가 있다고 생각하면됩니다. Sync 메서드 호출로 테스트 할 수 있습니까? – DaniDev

+0

거기에 동기화 버전의 메서드가 있다고 생각하지 않습니다 (Google에서 제공 한 것입니다). 또는 Sync 함수 호출로 Async 메서드를 래핑하려고 시도했는지 묻는 중입니까? –

+0

예. 디버깅 용입니다. – DaniDev

답변

0

유효성 검사를 몇 번이나 호출 할 수 있는지에 대한 제한이 있다고 생각하지만 그 한계를 정확히 알지 못합니다. 내 코드는 30 초마다 유효성 검사를 호출하여 사용자의 ID/전자 메일 등을 얻는 데 사용됩니다.이 설정은 몇 시간 후 작동을 멈췄습니다. 연결 당 몇 번만 유효성 검사를 호출하는 코드를 다시 작성한 이후 유효성 검사가 제대로 작동했습니다.