仅当客户端在其计算机中安装证书时才调用webapi

时间:2017-08-06 12:52:57

标签: asp.net iis asp.net-web-api window-server

我想通过证书添加一层安全性来访问托管的asp.net webapi。

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

任何人都可以为我提供实现此行为的方法。示例或视频将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以将IIS配置为需要客户端证书而无需编写任何代码。只需follow these instructions,特别是这些:

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

  2. 双击“身份验证”图标并禁用所有身份验证方法。

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

  4. 单击中间面板中的配置编辑器并将一对一设置为参考this link

答案 1 :(得分:0)

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

然而,可能的解决方案是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() { ... }
}