コード例 #1
0
        public async Task <IActionResult> RequestToken([FromBody] dynamic oauthValue)
        {
            Uri endpoint = new Uri(requestTokenEndpoint);
            var tokens   = (JsonElement)oauthValue;

            tokens.TryGetProperty("oauth_callback", out JsonElement oauthCallback);

            string authorizationHeader = _oauthHelper.GetAuthorizationHeader(
                endpoint, "POST", _twitterAuthKeys.ConsumerAPIKey, _twitterAuthKeys.ConsumerSecret, null, null, oauthCallback.ToString());

            _client.DefaultRequestHeaders.Clear();
            _client.DefaultRequestHeaders.Accept.Add(OAuth1Helper.GetMediaTypeHeader());
            _client.DefaultRequestHeaders.Add("Authorization", authorizationHeader);

            var response = await _client.PostAsync(endpoint, null);

            if (response.IsSuccessStatusCode)
            {
                var responseContent = await response.Content.ReadAsStringAsync();

                return(Ok(responseContent));
            }
            else
            {
                var errorMsg = await response.Content.ReadAsStringAsync();

                return(BadRequest(errorMsg));
            }
        }
        public async Task <TokenValidationResult> ValidateAccessTokenAsync(string token, string expectedScope = null)
        {
            Uri endpoint    = new Uri(userInfoEndpoint);
            var tokenValues = OAuth1Helper.GetResponseValues(token);

            tokenValues.TryGetValue("oauth_token", out string oauthToken);
            tokenValues.TryGetValue("oauth_token_secret", out string oauthTokenSecret);

            string authorizationHeader = _oauthHelper.GetAuthorizationHeader(
                endpoint, "GET", _options.TwitterConsumerAPIKey, _options.TwitterConsumerSecret, oauthToken, oauthTokenSecret, null);

            _client.DefaultRequestHeaders.Clear();
            _client.DefaultRequestHeaders.Accept.Add(OAuth1Helper.GetMediaTypeHeader());
            _client.DefaultRequestHeaders.Add("Authorization", authorizationHeader);

            var response = await _client.GetAsync(endpoint);

            if (response.IsSuccessStatusCode)
            {
                var userInfo = JsonDocument.Parse(await response.Content.ReadAsStringAsync());

                var claims = new List <Claim>();
                claims.AddRange(userInfo.RootElement.EnumerateObject().Select(item => new Claim(item.Name, item.Value.ToString())));

                return(new TokenValidationResult
                {
                    IsError = false,
                    Claims = claims
                });
            }

            return(new TokenValidationResult
            {
                IsError = true,
                ErrorDescription = response.ReasonPhrase
            });
        }