为什么我的 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 很容易确认这一点,并且很容易修复。
我有一个使用 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 很容易确认这一点,并且很容易修复。