微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Etsy API 中执行经过身份验证的请求

如何解决在 Etsy API 中执行经过身份验证的请求

我正在创建一个概念证明,它通过 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 特定代码。我曾尝试使用来自客户端的令牌和验证器以及令牌和令牌机密,但似乎都不起作用。

解决方法

当使用 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); 
            }

            


版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。