我有两个网站(一个是新的MVC应用程序,另一个是旧的WebForms应用程序)。我需要他们能够相互沟通。
我正在考虑在两个网站上实施RESTful Web API,然后让每个网站调用另一个网站的Web API。
到目前为止,这么好,但身份验证呢?我正在看Authentication Filters。它们似乎是MVC应用程序的合理方法,但看起来它们可能在WebForms上不受支持。
我的问题是,既然唯一可以调用这些API的实体是另一个网站,有没有办法简化这个过程?例如,我可以只有一个秘密GUID并传递它,如果其他网站获得正确的GUID,那么我认为它没问题吗?
请注意,我将使用HTTPS。此外,我们不是银行。安全性只需要合理,而不是更多。
答案 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)
}));
}
}
}
希望这有帮助。