protected virtual async Task <OAuthAccount> GetAccountFromAuthCode(WebAuthenticator authenticator, string identifier) { var postData = await authenticator.GetTokenPostData(ClientSecret); var reply = await Client.PostAsync("oauth2/token", new FormUrlEncodedContent(postData)); var resp = await reply.Content.ReadAsStringAsync(); var result = Deserialize <OauthResponse>(resp); if (!string.IsNullOrEmpty(result.Error)) { throw new Exception(result.ErrorDescription); } var account = new OAuthAccount() { ExpiresIn = result.ExpiresIn, Created = DateTime.UtcNow, RefreshToken = authenticator.AuthCode, Scope = authenticator.Scope.ToArray(), TokenType = result.TokenType, Token = result.AccessToken, ClientId = ClientId, Identifier = identifier, }; return(account); }
//Thanks you facebook for making your token exchange a get... protected override async Task <OAuthAccount> GetAccountFromAuthCode(WebAuthenticator authenticator, string identifier) { var auth = authenticator as FacebookAuthenticator; OauthResponse result; if (IsUsingNative) { result = new OauthResponse { ExpiresIn = auth.Expiration, TokenType = "Bearer", AccessToken = auth.AuthCode, RefreshToken = auth.AuthCode, }; } else { var postData = await authenticator.GetTokenPostData(ClientSecret); if (string.IsNullOrWhiteSpace(TokenUrl)) { throw new Exception("Invalid TokenURL"); } var url = new Uri(TokenUrl).AddParameters(postData); var reply = await Client.GetAsync(url); var resp = await reply.Content.ReadAsStringAsync(); result = Deserialize <OauthResponse>(resp); if (!string.IsNullOrEmpty(result.Error)) { throw new Exception($"{result.Error} : {result.ErrorDescription}"); } } var account = new OAuthAccount() { ExpiresIn = result.ExpiresIn, Created = DateTime.UtcNow, RefreshToken = result.RefreshToken, Scope = authenticator.Scope?.ToArray(), TokenType = result.TokenType, Token = result.AccessToken, ClientId = ClientId, Identifier = identifier, IdToken = result.Id, }; return(account); }
//Thanks you facebook for making your token exchange a get... protected override async Task<OAuthAccount> GetAccountFromAuthCode(WebAuthenticator authenticator, string identifier) { var auth = authenticator as FacebookAuthenticator; OauthResponse result; if (IsUsingNative) { result = new OauthResponse { ExpiresIn = auth.Expiration, TokenType = "Bearer", AccessToken = auth.AuthCode, RefreshToken = auth.AuthCode, }; } else { var postData = await authenticator.GetTokenPostData(ClientSecret); if (string.IsNullOrWhiteSpace(TokenUrl)) throw new Exception("Invalid TokenURL"); var url = new Uri(TokenUrl).AddParameters(postData); var reply = await Client.GetAsync(url); var resp = await reply.Content.ReadAsStringAsync(); result = Deserialize<OauthResponse>(resp); if (!string.IsNullOrEmpty(result.Error)) throw new Exception(result.ErrorDescription); } var account = new OAuthAccount() { ExpiresIn = result.ExpiresIn, Created = DateTime.UtcNow, RefreshToken = result.RefreshToken, Scope = authenticator.Scope?.ToArray(), TokenType = result.TokenType, Token = result.AccessToken, ClientId = ClientId, Identifier = identifier, }; return account; }