asmx 服务中的身份验证

Authentication in asmx service

我正在使用 ASP.NET 和 asmx 服务来访问我的 SQL 数据库。

该服务既称为客户端又称为后端。

该网站将供我们的内部员工和我们的客户使用。

asmx 服务中有一些方法,如果它们未通过身份验证,我想禁用对它们的访问。我真的不想在每个方法中写很多重复的代码来检查这个。

是否有通用或更好的方法? 谢谢。

WCF or Web API 似乎是比 ASMX 更好的授予对数据库中某些资源的访问权限的解决方案,因为该功能已经被淘汰了一段时间。

如果您使用 WebAPI,您可以为此使用 Authorize attribute that will prevent access to a certain method if the user isn't authorized to. WCF doesn't have this out of the box, but there are workarounds

如果您想使用 ASMX(我不再推荐),作为对您问题的直接回答,您可以简单地检查用户是否已通过身份验证。

if(HttpContext.Current.Request.IsAuthenticated)
{
    //continue normal code here
}
else
{
    //probably should return an HTTP 401 Unauthorized code
    Response.StatusCode = 401;
    Response.End();
}

您甚至可以将其抽象出来,使其成为请求开始时的一个方法调用,从而满足您的 "avoid a lot of code" 要求。

public class AsmxAuthenticationUtilities
{
    public static void VerifyUserIsAuthenticated()
    {
        if(!HttpContext.Current.Request.IsAuthenticated)
        {
            Response.StatusCode = 401;
            Response.End();
        }
    }
}

然后在您的 ASMX 方法开始时,您可以调用 AsmxAuthenticationUtilities.VerifyUserIsAuthenticated();