Web api 2 - windows +客户端证书身份验证 - 是否可能?

时间:2017-04-07 21:08:23

标签: asp.net-web-api asp.net-web-api2 windows-authentication client-certificates

我目前在IIS中托管的asp.net web api 2站点使用Windows身份验证进行保护。现在我们需要支持除Windows之外的客户端证书身份验证,我很难找到: - 如果这是可能的话 - 如果有任何可用的工作示例

我认为可能能够添加额外的owin中间件或消息处理程序或过滤器,但是看不到任何现有的专门针对Windows而不仅仅依赖于IIS。我知道thinktecture identitymodel可以做客户端证书,但不确定这两者是否可以合并?

我认为可能类似的表格+胜利的例子是https://techblog.dorogin.com/mixed-windows-forms-authentication-for-ajax-single-page-application-e4aaaac0424a

1 个答案:

答案 0 :(得分:0)

是的,所以我设法搞清楚了。值得庆幸的是,如果控制器返回401,IIS会自动添加negotiate / ntlm标头,因此如果用户在Windows浏览器上,它将像往常一样自动进行身份验证。因此,考虑到这一点,为了保持Windows auth工作,我:

  • 更新了IIS和VS中的站点以允许匿名AND windows auth
  • 将[AuthorizeAttribute]添加为全局操作过滤器(如果用户在访问过滤器时未通过身份验证,则会返回401)

为了让客户端证书auth正常工作,我使用了宏伟的Thinktecture.IdentityModel库,它允许我只在我的Startup.cs文件中添加一行(我们使用的是OWIN,这很容易)

app.UseClientCertificateAuthentication();

请参阅https://github.com/IdentityModel/Thinktecture.IdentityModel/blob/master/samples/OWIN/AuthenticationTansformation/KatanaAuthentication/Startup.cs以获取示例