两个网站相互通信的安全性

时间:2017-01-12 23:01:51

标签: asp.net rest authentication asp.net-web-api

我有两个网站(一个是新的MVC应用程序,另一个是旧的WebForms应用程序)。我需要他们能够相互沟通。

我正在考虑在两个网站上实施RESTful Web API,然后让每个网站调用另一个网站的Web API。

到目前为止,这么好,但身份验证呢?我正在看Authentication Filters。它们似乎是MVC应用程序的合理方法,但看起来它们可能在WebForms上不受支持。

我的问题是,既然唯一可以调用这些API的实体是另一个网站,有没有办法简化这个过程?例如,我可以只有一个秘密GUID并传递它,如果其他网站获得正确的GUID,那么我认为它没问题吗?

请注意,我将使用HTTPS。此外,我们不是银行。安全性只需要合理,而不是更多。

1 个答案:

答案 0 :(得分:2)

您可以为客户端设置一个简单的用户ID /密码,并将其传递给Authorization标头上的每个请求。然后,创建自定义AuthorizationFilterAttribute以验证凭据。

像这样。

public class MyAuthorizeAttribute : AuthorizationFilterAttribute
{   
        public ICustomerAuthenticator CustomerAuthenticator { get; set; }
        
        public override void OnAuthorization(HttpActionContext actionContext)
        {   
            var authInfo = $"{actionContext.Request.Headers.Authorization.Parameter}";

            var authenticationResult = CustomerAuthenticator.Authenticate(new []{ authInfo });

            if (!authenticationResult.Authenticated)
            {
                
                actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized)
                {   
                    Content = new StringContent("You are not authorized.")
                };
            }
            else
            {
                actionContext.RequestContext.Principal = new GenericPrincipal(new ClaimsIdentity(new List<Claim>
                {
                    new Claim("CustomerId", authenticationResult.Customer.Id.ToString()),
                    new Claim("CustomerName", authenticationResult.Customer.Name)
                }));
            }
        }
}

希望这有帮助。