如何使用访问令牌来获取访问 REST API 的授权

Mus*_*afa 2 c# asp.net-mvc asp.net-core-webapi

我有一个用于 REST API 的 HttpClient。我从服务器获取访问令牌,但无权使用 REST API。响应是Error: Unauthorized

\n

首先,使用getAccessToken()方法,我获取访问令牌。

\n
   public static async Task<string> getAccessToken()\n    {\n            var client = new HttpClient();\n\n            client.DefaultRequestHeaders.Add("Referer", "http://admin.altrabo.com/");\n\n            var tokenClient = new TokenClient()\n            {\n              client_Id= -1,\n              username= "admin",\n              password= "Main@dm!n",\n              grant_Type= "Main@dm!n",\n              externalProvider= 1,\n \n            };\n\n            HttpResponseMessage response = await client.PostAsJsonAsync<TokenClient>("https://api.altrabo.com/api/v1/token", tokenClient);\n            var json = JsonSerializer.Deserialize<AccessToken>(response.Content.ReadAsStringAsync().Result);\n            return json.access_token;\n   }\n
Run Code Online (Sandbox Code Playgroud)\n

它返回访问令牌。

\n

然后,使用该verifyToken()方法验证访问令牌。

\n
public static async Task<string> verifyToken(string access_token)\n{\n  var client = new HttpClient();\n  client.DefaultRequestHeaders.Add("Authorization", "Bearer " + access_token);\n  HttpResponseMessage response = await client.GetAsync("https://api.altrabo.com/api/v1/verifyToken");\n  return response.ReasonPhrase;          \n}\n
Run Code Online (Sandbox Code Playgroud)\n

回报OK

\n

但是当我想要访问 API 时,我遇到了Error: Unauthorized.

\n

例如,当我想获取机场列表时:

\n
public static async Task<string> ListAirports()\n{\n    var client = new HttpClient();\n    return await client.GetStringAsync("https://api.altrabo.com/api/v1/BaseData/GetAirports?pageSize=1000&pageNumber=1");\n}\n
Run Code Online (Sandbox Code Playgroud)\n

API 文档位于\n https://www.getpostman.com/collections/51cd9e7f5f6ebafa8c48\xe2\x80\x8e

\n

Lar*_*sen 7

将令牌添加到获取机场的请求中,其方式与验证令牌时的方式相同。

public static async Task<string> ListAirports(string access_token)
{
    var client = new HttpClient();
    client.DefaultRequestHeaders.Add("Authorization", "Bearer " + access_token);
    return await client.GetStringAsync("https://api.altrabo.com/api/v1/BaseData/GetAirports?pageSize=1000&pageNumber=1");
}
Run Code Online (Sandbox Code Playgroud)