private async Task <FacebookAccessTokenInfo> GetAccessTokenInfo(OAuthAccessToken token) { using (HttpClient client = new HttpClient()) { var url = "https://graph.facebook.com/debug_token"; url += $"?input_token={token.AccessToken}"; url += $"&access_token={token.AccessToken}"; var result = await client.GetAsync(url); if (!result.IsSuccessStatusCode) { return(null); } var content = await result.Content.ReadAsStringAsync(); var response = JsonConvert.DeserializeObject <FacebookAccessTokenInfoResponse>(content, new JsonSerializerSettings { ContractResolver = new DefaultContractResolver { NamingStrategy = new SnakeCaseNamingStrategy() } }); return(response.Data); } }
public async Task <IOAuthUserInfo> GetUserInfoAsync(OAuthAccessToken token) { var facebookInfo = await GetAccessTokenInfo(token); if (facebookInfo == null) { return(null); } return(await GetUserInfoAsync(facebookInfo.UserId, token)); }
public async Task <IOAuthUserInfo> GetUserInfoAsync(OAuthAccessToken token) { using (HttpClient client = new HttpClient()) { client.DefaultRequestHeaders.Add("Authorization", $"{token.TokenType} {token.AccessToken}"); var response = await client.GetAsync("https://openidconnect.googleapis.com/v1/userinfo"); if (!response.IsSuccessStatusCode) { return(null); } var content = await response.Content.ReadAsStringAsync(); return(JsonConvert.DeserializeObject <GoogleUserInfo>(content, new JsonSerializerSettings { ContractResolver = new DefaultContractResolver { NamingStrategy = new SnakeCaseNamingStrategy() } })); } }
private async Task <IOAuthUserInfo> GetUserInfoAsync(string userId, OAuthAccessToken token) { using (HttpClient client = new HttpClient()) { var url = $"https://graph.facebook.com/v3.2/{userId}"; url += $"?access_token={token.AccessToken}"; url += "&fields=first_name,last_name,name,picture"; var result = await client.GetAsync(url); if (!result.IsSuccessStatusCode) { return(null); } var content = await result.Content.ReadAsStringAsync(); return(JsonConvert.DeserializeObject <FacebookUserInfo>(content, new JsonSerializerSettings { ContractResolver = new DefaultContractResolver { NamingStrategy = new SnakeCaseNamingStrategy() } })); } }
private IEnumerable <Microsoft.AspNetCore.Authentication.AuthenticationToken> GenerateAuthenticationTokens(OAuthAccessToken token) { var authTokens = new List <Microsoft.AspNetCore.Authentication.AuthenticationToken>(); if (token != null) { if (!string.IsNullOrWhiteSpace(token.AccessToken)) { authTokens.Add(new Microsoft.AspNetCore.Authentication.AuthenticationToken { Name = "access_token", Value = token.AccessToken }); } if (!string.IsNullOrEmpty(token.TokenType)) { authTokens.Add(new Microsoft.AspNetCore.Authentication.AuthenticationToken { Name = "token_type", Value = token.TokenType }); } if (token.ExpiresIn > 0) { var expiresAt = DateTime.UtcNow + TimeSpan.FromSeconds(token.ExpiresIn); authTokens.Add(new Microsoft.AspNetCore.Authentication.AuthenticationToken { Name = "expires_at", Value = expiresAt.ToString("o", CultureInfo.InvariantCulture) }); } } return(authTokens); }