【问题标题】:Performing Authenticated Requests in Etsy API在 Etsy API 中执行经过身份验证的请求
【发布时间】:2021-05-01 08:04:25
【问题描述】:

我正在创建一个概念证明,它通过 C# 和 Angular 来利用 Etsy API。

我目前在向 Etsy API 执行经过身份验证的请求时遇到问题,并在请求经过身份验证的用户的个人资料时收到以下响应:

“没有登录用户;请指定一个用户ID”

下面是我调用的控制器动作。

您会注意到,如果 __SELF__ 作为 userId 传入,则会调用身份验证代码。否则将跳过该代码。

当我传入有效的用户名/ID 时,我能够检索用户个人资料。

        [HttpGet("{userId}")]
        public async Task<IActionResult> UserProfile(string userId)
        {
            string requestUrl = String.Format("https://openapi.etsy.com/v2/users/{0}/profile?api_key={1}", userId, AccountController.ConsumerKey);

            string token = Request.Headers["Access_Token"];
            string tokenSecret = Request.Headers["Access_Verifier"];

            if (userId.Equals("__SELF__"))
            {
                var client = new OAuthRequest
                {
                    Method = "GET",
                    Type = OAuthRequestType.ProtectedResource,
                    SignatureMethod = OAuthSignatureMethod.HmacSha1,
                    ConsumerKey = AccountController.ConsumerKey,
                    ConsumerSecret = AccountController.ConsumerSecret,
                    Token = token,
                    TokenSecret = tokenSecret,
                    RequestUrl = requestUrl,
                };              

                requestUrl += "&" + client.GetAuthorizationQuery();
            }


            using (HttpClient client = new HttpClient())
            using (HttpResponseMessage res = await client.GetAsync(requestUrl))
            using (HttpContent content = res.Content)
            {
                string data = await content.ReadAsStringAsync();
                if (data != null)
                {
                    try
                    {
                        UserModel userInfo = JsonConvert.DeserializeObject<UserModel>(data);
                        if (userInfo != null && userInfo.Count == 1 && userInfo.Results != null && userInfo.Results.Count == 1)
                        {
                            return Ok(userInfo.Results[0]);
                        }
                    }
                    catch (Exception)
                    {
                        return NotFound(data);
                    }
                }

                return NotFound();
            }
        }

我假设我在这里错误地利用了 OAuth 特定代码。我已经尝试使用来自客户端的令牌和验证程序以及令牌和令牌机密,但似乎都不起作用。

【问题讨论】:

    标签: c# angular api etsy


    【解决方案1】:

    当使用 OAuth 凭据发出请求时,我可以通过从请求 uri 中删除 api 密钥来解决此问题。

    
                string requestUrl = String.Format("https://openapi.etsy.com/v2/users/{0}/profile", userId);
    
                if (userId.Equals("__SELF__"))
                {
                    var client = new OAuthRequest
                    {
                        Method = "GET",
                        Type = OAuthRequestType.ProtectedResource,
                        SignatureMethod = OAuthSignatureMethod.HmacSha1,
                        ConsumerKey = AccountController.ConsumerKey,
                        ConsumerSecret = AccountController.ConsumerSecret,
                        Token = token,
                        TokenSecret = tokenSecret,
                        RequestUrl = requestUrl,
                    };              
    
                    requestUrl += "&" + client.GetAuthorizationQuery();
                } else {
                   requestUrl += String.Format("?api_key={0}", AccountController.ConsumerKey); 
                }
    
                
    
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      • 2013-08-27
      • 1970-01-01
      • 2013-03-31
      • 2020-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多