Asp.net Webservice – 使用jquery AJAX安全地调用webservice
|
我想在Ajax上使用webservices.使用ajax调用webservice时,安全性的最佳方法是什么?我想防止远程调用应用程序. 我有以下web服务,例如: [WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class Users : System.Web.Services.WebService
{
[WebMethod]
public List<User> GetUsers()
{
List<User> listUsers = new List<User>();
User user = new User();
user.Id = 1;
user.Name = "John";
User user2 = new User();
user2.Id = 2;
user2.Name = "Martin";
listUsers.Add(user);
listUsers.Add(user2);
return listUsers;
}
}
}
我用jquery ajax调用webservice: <script type="text/javascript">
$(function () {
getUsers();
function getUsers() {
$.ajax({
type: "POST",url: "Webservices/Users.asmx/GetUsers",data: "{}",contentType: "application/json; charset=utf-8",dataType: "json",success: function (response) {
var users = response.d;
$.each(users,function (index,user) {
console.log(user.Name);
});
},failure: function (msg) {
}
});
}
});
</script>
解决方法没有最好的方式,答案总是取决于它,尽管它非常无益.例如,您可以使用 forms authentication.如果使用Web服务和Web服务的Web应用程序是同一ASP.NET应用程序的一部分,则浏览器可以为每次调用Web服务无缝地发送表单身份验证票证(cookie).在配置文件中,您可以拥有 <authorization>
<deny users="?" />
</authorization>
这将拒绝匿名用户访问,也将覆盖Web服务.换句话说,除非用户登录并获得带有故障单的有效cookie,否则无法使用服务.当然,您必须使用HTTPS.否则,中间的任何人都可以在标题中获取cookie并致电您的服务. 最后,无法确保在绝对意义上没有人在您的应用程序之外调用Web服务.上述方法确保中间没有人调用您的服务.但是没有办法确保有效用户直接在您的应用程序之外调用服务,因为Web服务调用者是JavaScript,并且用户可以通过查看脚本或甚至查看脚本轻松找出您在JavaScript中构建的任何安全性.来自浏览器的流量.任何具有一定技术性的最终用户都可以重播请求或修改请求,并使用有效凭据提交给您的Web服务. 编辑:- 以下是您要启用FormsAuthentication的详细信息. (1)在Web.config中,在< system.web>下,确保你有这个. <authentication mode="Forms">
<forms loginUrl="Login.aspx" defaultUrl="~/" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
这将确保所有未经过身份验证的(匿名)用户重定向到Login.aspx. (2)使用您的登录逻辑实现Login.aspx以获取用户ID和密码,并根据数据库或其他任何方式验证它们.一旦身份验证成功,即用户输入的ID和密码与您在数据库中的内容匹配,可以在登录按钮单击处理程序中设置故障单. protected void Button1_Click(object sender,EventArgs e)
{
// Do all your login logic here
// once user ID and password entered by the user are okay,call this
string ticket = FormsAuthentication.Encrypt(
new FormsAuthenticationTicket("userId",false,15));
HttpCookie FormsCookie = new HttpCookie(
FormsAuthentication.FormsCookieName,ticket) { HttpOnly = true };
HttpContext.Current.Response.Cookies.Add(FormsCookie);
}
(3)将PrincipalPermissionAttribute添加到这样的Web方法中. public class Users : System.Web.Services.WebService
{
[PrincipalPermissionAttribute(SecurityAction.Demand)]
[WebMethod]
public List<User> GetUsers()
{
// Same code as what you have now
}
}
如果您现在转到任何页面,您将被重定向到login.aspx,您需要输入用户ID和密码并登录.登录时,将创建表单身份验证cookie并将其写入响应.从那时起,对您的应用程序的所有请求都将引入cookie(浏览器将为您执行此操作).如果您没有登录,如果直接转到Web服务,您仍将被重定向到登录页面.正如我在原始答案中提到的,登录用户仍然可以直接访问Web服务.如果JavaScript可以做某事,用户也可以这样做. 顺便说一句,Web服务(asmx)是一种弃用的技术. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 为什么在ASP.Net中向StatusDescription添加换行符会关闭连接
- asp.net – ReportViewer – 隐藏PDF导出
- asp.net-mvc – Glass Mapper Unity
- asp.net – Microsoft Jet数据库引擎找不到对象’Sheet1 $’
- asp.net-web-api – Web API中的OData POST的媒体资源支持
- asp.net-mvc – 为什么ASP.NET MVC默认的模型绑定器很慢?做
- asp.net-mvc-4 – 如何获取没有隐藏输入的AntiForgeryToken
- .net – TagBuilder从MVC 3 beta版转到RC
- asp.net – 升级到WebAPI 2.1时出错XmlDocumentationProvid
- asp.net-mvc – 使用自定义ASP.NET MVC IValueProvider,而不
- asp.net-mvc – 如何在asp.net C#中从http重定向
- asp-classic – 浏览器似乎忽略了响应缓存控制指
- asp.net – 内部图像和文本的asp:LinkButton在回
- 在应用程序配置中找不到LocalSqlServer或连接字符
- asp.net – MVC-Mini-Profiler – Web窗体 – 找
- asp.net+jquery ajax无刷新登录的实现方法
- asp.net-mvc – 为id而不是name设置HtmlFieldPre
- asp.net – SVG的图像在浏览器与PNG后备
- asp.net – ASPXGridView ClientSideEvents如何获
- .net – CS0012:类型’System.Data.Linq.DataCo
