API未提及oAuth2令牌

时间:2016-11-21 08:11:44

标签: angularjs asp.net-web-api token jwt

前段时间我使用oAuth2和OpenID进行了一个项目进行访问控制,我设法让它运行良好,但现在我开始了一个新项目,我必须再次实现令牌验证。我使用了与之前项目相同的模式,设置,配置和技术(90%的设置是相同的),我的令牌被正确填充并作为带有HTTP请求的标头传递给我的API:

Old Project Headers

翻译: {   " iss":" https://localhost",   " aud":" https://localhost/resources",   " exp":1479710870,   " nbf":1479707270,   " client_id":"隐含",   "范围":[     "的OpenID&#34 ;,     "轮廓&#34 ;,     "作用&#34 ;,     "网络"   ]   " sub":" 55dad807b33c2c2648342757",   " auth_time":1479705621,   " idp":" idsrv",   "角色":"管理员",   "功能":[     "形状视图&#34 ;,     "形状添加&#34 ;,     " ......等"   ]   " amr":[     "密码"   ] }

New Project Headers

翻译: {   " iss":" https://localhost",   " aud":" https://localhost/resources",   " exp":1479711165,   " nbf":1479707565,   " client_id":"隐含",   "范围":[     "的OpenID&#34 ;,     "轮廓&#34 ;,     "作用&#34 ;,     "网络"   ]   " sub":" SYSTEM",   " auth_time":1479707564,   " idp":" idsrv",   "角色":"系统用户",   "功能":[     " ADD_BUSS_UNIT&#34 ;,     " ADD_EMP&#34 ;,     " ......等"   ]   " amr":[     "密码"   ] }

(新项目的缓存控制是额外的,可能导致问题吗?似乎不太可能?)

无论如何,出于某种原因,当我到达控制器时,HttpContext.Current.User.Identity被填充为System.Security.Principal.WindowsIdentity而不是我期望看到的ClaimsIdentity:

Old Project User

New Project User

这两个项目的最大区别在于,新版本在Windows Server 2008 R2中运行,旧版本在Windows7上运行。 IIS版本是相同的,IIS中的设置也是相同的,正如我所提到的,大多数其他设置是相同的。

我的API启动类:

public void Configuration(IAppBuilder app)
{
// Allow all origins
app.UseCors(CorsOptions.AllowAll);

JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>();
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

app.UseIdentityServerBearerTokenAuthentication(
     new IdentityServerBearerTokenAuthenticationOptions
     {
         Authority = Constants.STSAuthEndPoint,
         RoleClaimType = "role",
         RequiredScopes = new[] { "web" }
     });
}

我的一些想法是关于它为什么不起作用的。

  1. 模仿 - 可能是IIS或Windows Server冒充用户吗?我检查了两台服务器之间的设置,一切看起来都一样。
  2. SUB值 - 我在新项目上使用用户名,并在前一个项目上使用了Guid格式ID。我记得看到一些关于子值是两个值组合的东西,但我不知道这是否会导致问题?
  3. 角色 - 角色名称中的空格是否会导致问题?
  4. 登录屏幕 - 我为新项目创建了一个新的登录屏幕,该屏幕比上一个更加自定义,但登录工作正常,API无法接收该用户。
  5. 我可以提供很多其他信息,但我不想让帖子过长,所以如果需要更多信息,请告诉我。

    感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

看起来这是一个Red Herring,实际的问题是我的OWIN Startup类没有开火。我找到了这个,因为我试图进入我的Startup类而不能,所以我读了一下,发现了以下文章:

BrightScript Support

我使用nuget和voila在项目上安装了Microsoft.Owin.Host.SystemWeb包!看起来它现在正在工作!