前段时间我使用oAuth2和OpenID进行了一个项目进行访问控制,我设法让它运行良好,但现在我开始了一个新项目,我必须再次实现令牌验证。我使用了与之前项目相同的模式,设置,配置和技术(90%的设置是相同的),我的令牌被正确填充并作为带有HTTP请求的标头传递给我的API:
旧
翻译: { " 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":[ "密码" ] }
新
翻译: { " 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:
旧
新
这两个项目的最大区别在于,新版本在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" }
});
}
我的一些想法是关于它为什么不起作用的。
我可以提供很多其他信息,但我不想让帖子过长,所以如果需要更多信息,请告诉我。
感谢您提供的任何帮助。
答案 0 :(得分:0)
看起来这是一个Red Herring,实际的问题是我的OWIN Startup类没有开火。我找到了这个,因为我试图进入我的Startup类而不能,所以我读了一下,发现了以下文章:
我使用nuget和voila在项目上安装了Microsoft.Owin.Host.SystemWeb包!看起来它现在正在工作!