C# 为什么标识为2的ASP.NET Web API不授予我访问受保护资源的权限?
我有一个使用Identity 2的Web API。它似乎可以很好地对我进行身份验证,C# 为什么标识为2的ASP.NET Web API不授予我访问受保护资源的权限?,c#,asp.net,asp.net-web-api,asp.net-identity-2,bearer-token,C#,Asp.net,Asp.net Web Api,Asp.net Identity 2,Bearer Token,我有一个使用Identity 2的Web API。它似乎可以很好地对我进行身份验证,/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" 然后,当我发送如
/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
看起来像:
sameverylongtoken的承载者
我仍然得到一个401-未授权
。这里可能出了什么问题?是否Web API不知何故没有接收或正确解密承载令牌?当我在API中设置断点,并在控制器操作中检查User
属性时,它的所有属性都为null或default,但它有一个ClaimsIdentity
,其属性也都为null或default,并且它的Claims
集合为空
我是否必须手动设置所有索赔,而不是仅设置自定义索赔?我本以为ApplicationAuthProvider.GrantResourceOwnerCredentials
至少会添加一个声明,例如用户名或id。我再次查看了所有代码,不知何故丢失了将auth令牌添加到请求头中的行。在发送请求之前检查这些头很容易确认这一点,并且很容易修复。我再次查看了所有代码,不知何故丢失了将auth令牌添加到请求头的行。在发送请求之前检查这些头很容易确认这一点,并且很容易修复。如果在Fiddler中运行请求,是否在请求头中看到传入的令牌?还有,在GrantResourceOwnerCredentials方法中的OAuthProvider类的请求上下文中,您看到了什么?出于某种原因,我没有看到任何使用API url捕获的请求。当我将筛选器设置为仅主机localhost:51999
、我的API,并从客户端运行post请求时,不会捕获任何内容。我在GrantResourceOwnerCredentials
中没有看到任何请求上下文,只有OAuthGrantResourceOwnerCredentialsContext
,并且该方法不是从/Token
端点调用的,用于登录用户。这一切都很好,正如我清楚地指出的,在登录时,我从/Token
获得了一个很好的响应,带有一个auth令牌,但它还不会出现在GrantResourceOwnerCredentials
的标题中。如果您在Fiddler中运行您的请求,您是否在请求标题中看到传入的令牌?还有,在GrantResourceOwnerCredentials方法中的OAuthProvider类的请求上下文中,您看到了什么?出于某种原因,我没有看到任何使用API url捕获的请求。当我将筛选器设置为仅主机localhost:51999
、我的API,并从客户端运行post请求时,不会捕获任何内容。我在GrantResourceOwnerCredentials
中没有看到任何请求上下文,只有OAuthGrantResourceOwnerCredentialsContext
,并且该方法不是从/Token
端点调用的,用于登录用户。这一切都很好,正如我明确指出的,在登录时,我从/Token
获得了一个很好的响应,带有一个auth令牌,但它还不会出现在GrantResourceOwnerCredentials
的标题中。