保护 MVC4 c# webapi,以便只有我的应用可以访问它

本文关键字:我的 应用 访问 MVC4 webapi 保护 | 更新日期: 2023-09-27 17:56:12

我在这里读了一些帖子,但似乎找不到像样的答案,希望有人可以提供帮助。

我已经看到你可以添加

[验证]

MVC 控制器的属性。这在人们可以登录的网站情况下是合理的,但我有一个与 Web 服务通信的 iOS 应用程序。我想限制对我的应用程序的访问。

我认为需要的"步骤"是:

  1. 向所有 webapi 操作添加某种"[身份验证]"属性(在全局级别甚至更好)
  2. 为 Web 服务创建某种 SSL 证书
  3. 添加某种身份验证方法,并将凭据硬编码到应用代码中

如何利用 mvc 框架实现这一点或类似目标?

(PS:看过这样的帖子,但是将这个逻辑添加到每一段代码操作中是非常不切实际的,还有我会创建什么样的"挑战"??

保护 MVC4 c# webapi,以便只有我的应用可以访问它

有一些简单的方法可以向Web服务进行身份验证,并且您不必使用任何花哨的东西,甚至不必遵循OAuth或OpenID等标准(并不是说这些不好,但听起来你想通过简单的东西踏入大门)。

您需要做的第一件事是学习如何从AuthorizeAttribute派生(System.Web.Http命名空间中的那个,而不是MVC命名空间)。重写 OnAuthorization 函数并将身份验证逻辑放入其中。请参阅此内容以获取帮助,MVC Api Action & System.Web.Http.AuthorizeAttribute - 如何获取帖子参数?

接下来确定要如何进行身份验证。在最基本的形式中,您可以执行一些操作,例如向每个名为 MyID: [SomeRandomString] 的 Web 请求添加一个标头。然后在OnAuthorization方法中检查请求的标头,如果字符串不正确,则将响应状态代码设置为 401(未经授权)。

如果您的服务是自托管的,则可以将证书绑定到它托管的端口并使用 https://前缀,并且您现在已经保护了传输层,因此人们看不到您传递的 ID/密码。如果您在 IIS 中托管,则可以通过它绑定证书。这很重要,因为通过纯HTTP传递密码之类的东西并不安全。


创建自定义授权属性

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/