【问题标题】:TObase64String not encoding my Access token , resulting to 401 unauthorizedTObase64String 未编码我的访问令牌,导致 401 未经授权
【发布时间】:2019-11-02 13:29:14
【问题描述】:

问题是 ToBase64string 中的字符串“resulted”在调试时正在转换,但是当我在编码后使用 result 时,似乎在我想使用“resulted”的“var response =”中编码后,它不会基于调试模式进行编码。为什么?我错过了什么

   [HttpGet, Route("values/get")]
        public async Task<string> Get(string resulted)
        {
            //resulted.Remove(0, 17);
             string res = "";
             using (var client = new HttpClient())
            {
                // HTTP POST

                client.BaseAddress = new Uri("https://api.elliemae.com/");
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                client.DefaultRequestHeaders.Add("Authorization", "Bearer " + Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(resulted)));
                var response = client.GetAsync("/encompass/v1/loans/{ea7c29a6-ee08-4816-99d2-fbcc7d15731d}?Authorization=Bearer "+resulted+"&Content-Type=application/json").Result;
                using (HttpContent content = response.Content)
                {
                    // ... Read the string.
                    Task<string> result = content.ReadAsStringAsync();
                    res = result.Result;
                }
            }
            return res;
        }

【问题讨论】:

    标签: c# access-token encode unauthorized tobase64string


    【解决方案1】:

    当您的 Acesstoken 返回额外数据时,例如:"{\"access_token\":\"uKW7HeksFXz5QE1sF6Kjmfda5Fxi\",\"token_type\":\"Bearer\"}\r\n"强> 然后使用 'substring' 将其放入 accesstoken 代码,例如应该如下所示 -> 'uKW7HeksFXz5QE1sF6Kjmfda5Fxi'

    怎么样? Accesstoken.Substring(x , x ); (x=你从字符串中减去的一些数字)

    然后把它放在你的 DefaultRequestHeaders 中

      public async Task<string> Get(string Accesstoken)
    
                {
                     string res = "";
                     using (var client = new HttpClient())
                    {
                        Accesstoken = Accesstoken.Substring(17, 28);
                        client.BaseAddress = new Uri("https://api.elliemae.com/");
                       //client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
                        client.DefaultRequestHeaders.Add("Authorization", "Bearer " + Accesstoken);
                        var response = client.GetAsync("encompass/v1/loans/ea7c29a6-ee08-4816-99d2-fbcc7d15731d").Result;
                        using (HttpContent content = response.Content)
                        {
                            // ... Read the string.
                            Task<string> result = content.ReadAsStringAsync();
                            res = result.Result;
                        }
    

    【讨论】:

      【解决方案2】:

      您需要在请求中添加授权标头。您需要将 Authorization 标头设置为 Bearer [acces_token]

      httpClient.DefaultRequestHeaders.Authorization =
             new AuthenticationHeaderValue("Bearer "+ access_token);
      

      注意Bearer字后面有一个空格。

      这个值 new AuthenticationHeaderValue("Bearer "+ access_token) 应该类似于 new AuthenticationHeaderValue("Bearer asadasda23qdaddfs45345") 其中 asadasda23qdaddfs45345 是您收到的访问令牌。

      【讨论】:

      • 如何将其添加到请求中?
      • 我已经在 post 中获得了我的访问令牌,但是如何将该令牌添加到我的 get 请求中?
      • @fay 更新答案
      • 我应该将其添加到帖子中还是获取?我到底应该把这个放在哪里?
      • @fay 你可以在任何你已经创建了 HttpClient 的地方添加它。只需设置标题。对于所有类型 GET、POST、PUT 等的所有安全 API 请求,都应该这样做。
      猜你喜欢
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      • 2016-05-17
      • 2014-01-30
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      相关资源
      最近更新 更多