为什么我的 ASP.NET Web API with Identity 2 没有授予我访问受保护资源的权限?

Why is my ASP.NET Web API with Identity 2 not granting me access to protected resources?

我有一个使用 Identity 2 的 Web API。它似乎可以很好地验证我的身份,/Token 端点 returns 我反序列化为 AuthTicket 实例的内容,内容很像:

AccessToken: "averylongtoken"
Expires: {2016/12/12 8:19:22 AM}
ExpiresIn: 1209599
Issued: {2016/11/28 8:19:22 AM}
TokenType: "bearer"
Username: "myusername"

然后,当我发送这样的请求时:

var response = await Client.GetAsync("api/appt/3/true", cancellationToken);

Client.DefaultRequestHeaders.Authorization 看起来像:

Bearer theSameVeryLongToken

我仍然得到 401 - Not authorized。这里有什么问题?会不会是 Web API 以某种方式没有接收或正确解密不记名令牌?当我在 API 中设置断点并检查控制器操作中的 User 属性 时,它的所有属性都是 null 或默认值,但它有一个 ClaimsIdentity ,其属性也全部为 null 或 default,其 Claims 集合为空。

我必须手动设置所有声明还是仅设置我的自定义声明?我原以为 ApplicationOAuthProvider.GrantResourceOwnerCredentials 至少会添加一个声明,例如用户名或 ID。

我再次检查了所有代码,不知何故丢失了将授权令牌添加到请求的行 headers。在发送请求之前检查这些 headers 很容易确认这一点,并且很容易修复。