您可以通过一些简单的方法向您的 Web 服务验证自己,并且您不必使用任何花哨的东西,甚至不必遵循 OAuth 或 OpenID 之类的标准(并不是说这些不好,但听起来您想站稳脚跟在门口有一些简单的东西)。
您需要做的第一件事是学习如何从AuthorizeAttribute
(System.Web.Http 命名空间中的那个,而不是 MVC 中的那个)派生。您覆盖该OnAuthorization
函数并将您的身份验证逻辑放在那里。请参阅此获取帮助,MVC Api Action & System.Web.Http.AuthorizeAttribute - 如何获取发布参数?
接下来决定如何进行身份验证。在最基本的形式中,您可以执行一些操作,例如为每个名为MyID: [SomeRandomString]
. 然后在您的OnAuthorization
方法中检查请求的标头,如果它不是正确的字符串,则将响应状态代码设置为 401(未授权)。
如果您的服务是自托管的,那么您可以将证书绑定到它托管的端口并使用 https:// 前缀,您现在已经保护了传输层,因此人们无法看到您传递的 id/密码。如果您在 IIS 中托管,则可以通过它绑定证书。这很重要,因为通过普通 HTTP 传递密码之类的东西是不安全的。
创建自定义 AuthorizeAttribute
public class PasswordAuthorizeAttribute : System.Web.Http.AuthorizeAttribute
{
public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
{
try
{
string password = actionContext.Request.Headers.GetValues("Password").First();
// instead of hard coding the password you can store it in a config file, database, etc.
if (password != "abc123")
{
// password is not correct, return 401 (Unauthorized)
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
return;
}
}
catch (Exception e)
{
// if any errors occur, or the Password Header is not present we cannot trust the user
// log the error and return 401 again
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
return;
}
}
}
[PasswordAuthorize]
public class YourController : ApiController
{
}
生成自签名证书
生成自签名证书的最简单方法是打开 IIS,单击服务器证书,然后“生成自签名证书”,如下所示,http://www.sslshopper.com/article-how-to-create-a-self -signed-certificate-in-iis-7.html
将证书绑定到端口
http://msdn.microsoft.com/en-us/library/ms733791.aspx
netsh http add sslcert ipport=0.0.0.0:8000 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF}
这是一个很棒的教程,关于如何通过 https 来自托管 web api 服务,http: //pfelix.wordpress.com/2012/02/26/enabling-https-with-self-hosted-asp-net-web -api/