问题原因是未正确设置 Web API 的身份验证,可以使用属性进行声明授权,并使用 IdentityModel.Tokens.Jwt 库生成 Token。
具体代码示例如下:
在 Web API 的控制器上声明授权特性:
[Authorize] public class MyController : ApiController { ... }
使用 IdentityModel.Tokens.Jwt 生成 Token:
var securityKey = new SymmetricSecurityKey(Encoding.Default.GetBytes("your-secret-key")); var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature); var header = new JwtHeader(signingCredentials);
var payload = new JwtPayload { {"sub", "subject"}, {"exp", DateTimeOffset.Now.AddMinutes(30).ToUnixTimeSeconds()} };
var token = new JwtSecurityToken(header, payload);
在客户端请求 API 时在 Authorization 头部加入 Token:
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); var response = await httpClient.GetAsync("api/mycontroller/mymethod");