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

时间:2016-11-28 09:19:39

标签: c# asp.net asp.net-web-api asp.net-identity-2 bearer-token

我有一个使用Identity 2的Web API。它似乎很好地验证了我,@available(iOS 10, *) extension HyberFirebaseMessagingDelegate : UNUserNotificationCenterDelegate { // Receive displayed notifications for iOS 10 devices. func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { let userInfo = notification.request.content.userInfo print(userInfo)//print user info } } extension HyberFirebaseMessagingDelegate : FIRMessagingDelegate { // Receive data message on iOS 10 devices. func applicationReceivedRemoteMessage(_ remoteMessage: FIRMessagingRemoteMessage) { print("%@", remoteMessage.appData) } } 端点返回我反序列化到/Token实例的内容,其内容非常类似于:

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。这可能有什么问题?可能是Web API以某种方式没有接收或正确解密承载令牌?当我在API中设置断点并检查控制器操作中的401 - Not authorized属性时,其所有属性都为null或default,但它有一个User,其属性也都为null或者默认情况下,其ClaimsIdentity集合为空。

我是否需要手动设置所有声明而不是我自定义声明?我原以为Claims至少会添加一个声明,例如用户名或ID。

1 个答案:

答案 0 :(得分:0)

我再次查看了所有代码,不知何故丢失了将auth令牌添加到请求标头的行。在发送请求之前检查这些标题很容易证实这一点,并且很容易修复。