仅当客户端已在他的机器上安装证书时调用webapi
问题描述:
我想通过证书添加一层安全性以访问托管的asp.net webapi。仅当客户端已在他的机器上安装证书时调用webapi
我希望只有那些在他们的机器上安装证书的客户端才能访问该webapi。
任何人都可以提供一种方法来实现这种行为。示例或视频将不胜感激。
答
正如评论中所建议的,快速谷歌搜索可能会导致有趣的结果。
然而有一个可能的解决方案是在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,具体如下:
单击中间面板中的SSL设置,然后选择需要SSL和客户端证书要求。
双击认证图标并禁用所有认证方法。
确保已安装IIS客户端证书映射身份验证。
点击配置编辑器的中间面板和设置一对一映射参考this link
我只是谷歌搜索的Web API 2证书认证“,并得到了一整页的结果,包括一些计算器页面。你尝试过吗? –
看起来这个人经历了类似的困境,并做了一个了不起的工作记录他的步骤:https://*.com/questions/35582396/how-to-use-a-client-certificate-to-authenticate-and-授权-IN-A-Web的API –