仅当客户端已在他的机器上安装证书时调用webapi

问题描述:

我想通过证书添加一层安全性以访问托管的asp.net webapi。仅当客户端已在他的机器上安装证书时调用webapi

我希望只有那些在他们的机器上安装证书的客户端才能访问该webapi。

任何人都可以提供一种方法来实现这种行为。示例或视频将不胜感激。

+2

我只是谷歌搜索的Web API 2证书认证“,并得到了一整页的结果,包括一些计算器页面。你尝试过吗? –

+0

看起来这个人经历了类似的困境,并做了一个了不起的工作记录他的步骤:https://*.com/questions/35582396/how-to-use-a-client-certificate-to-authenticate-and-授权-IN-A-Web的API –

正如评论中所建议的,快速谷歌搜索可能会导致有趣的结果。

然而有一个可能的解决方案是在the following Microsoft article提出的实现:

public class RequireHttpsAttribute : AuthorizationFilterAttribute 
{ 
    public override void OnAuthorization(HttpActionContext actionContext) 
    { 
     if (actionContext.Request.RequestUri.Scheme != Uri.UriSchemeHttps) 
     { 
      actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden) 
      { 
       ReasonPhrase = "HTTPS Required" 
      }; 
     } 
     else 
     { 
      base.OnAuthorization(actionContext); 
     } 
    } 
} 

你会再装点您的ApiController行动:

public class SomeController : ApiController 
{ 
    [RequireHttps] 
    public HttpResponseMessage Get() { ... } 
} 

您可以配置IIS以要求客户端证书,而无需编写一行的代码。只需follow these instructions,具体如下:

  1. 单击中间面板中的SSL设置,然后选择需要SSL和客户端证书要求。

  2. 双击认证图标并禁用所有认证方法。

  3. 确保已安装IIS客户端证书映射身份验证。

  4. 点击配置编辑器的中间面板和设置一对一映射参考this link