public static OAuth2TokenInfo CreateFromJson(string json)
        {
            var jsonObj = JsonConvert.DeserializeObject <Json>(json);
            var token   = new OAuth2TokenInfo();

            token.AccessToken  = jsonObj.access_token;
            token.ExpiresIn    = jsonObj.expires_in;
            token.RefreshToken = jsonObj.refresh_token;
            token.IdToken      = jsonObj.id_token;
            return(token);
        }
Ejemplo n.º 2
0
        public async Task <OAuth2TokenInfo> GetTokenInfoAsync(OAuth2Credential credential, string redirectUri, string authorizationCode)
        {
            var queryParams = new Dictionary <string, string>();

            queryParams.Add("code", authorizationCode);
            queryParams.Add("client_id", credential.ClientId);
            queryParams.Add("client_secret", credential.ClientSecret);
            queryParams.Add("redirect_uri", redirectUri);
            queryParams.Add("grant_type", "authorization_code");
            var queryString = _net.GetQueryString(queryParams);

            var request = _net.CreateHttp(TokenEndpoint);

            request.Method = "POST";
            request.Headers[HttpRequestHeader.ContentType]   = "application/x-www-form-urlencoded";
            request.Headers[HttpRequestHeader.ContentLength] = Encoding.UTF8.GetByteCount(queryString).ToString();
            using (var stream = await request.GetRequestStreamAsync().ConfigureAwait(false))
                using (var writer = new StreamWriter(stream))
                {
                    await writer.WriteAsync(queryString).ConfigureAwait(false);
                }

            DateTime issuedTime = DateTime.UtcNow;

            using (var response = await request.GetResponseAsync().ConfigureAwait(false))
            {
                var jsonContent = await _net.GetResponseTextAsync(response).ConfigureAwait(false);

                if (response.StatusCode == HttpStatusCode.OK)
                {
                    var tokenInfo = OAuth2TokenInfo.CreateFromJson(jsonContent);
                    tokenInfo.IssuedTime = issuedTime;
                    return(tokenInfo);
                }
                else
                {
                    throw new WebException(jsonContent, WebExceptionStatus.ReceiveFailure);
                }
            }
        }