GVKun编程网logo

jquery – CORS:访问需要身份验证的Web服务(ASP.NET表单)(访问页面需要验证证书)

6

如果您想了解jquery–CORS:访问需要身份验证的Web服务(ASP.NET表单)和访问页面需要验证证书的知识,那么本篇文章将是您的不二之选。我们将深入剖析jquery–CORS:访问需要身份验证

如果您想了解jquery – CORS:访问需要身份验证的Web服务(ASP.NET表单)访问页面需要验证证书的知识,那么本篇文章将是您的不二之选。我们将深入剖析jquery – CORS:访问需要身份验证的Web服务(ASP.NET表单)的各个方面,并为您解答访问页面需要验证证书的疑在这篇文章中,我们将为您介绍jquery – CORS:访问需要身份验证的Web服务(ASP.NET表单)的相关知识,同时也会详细的解释访问页面需要验证证书的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

jquery – CORS:访问需要身份验证的Web服务(ASP.NET表单)(访问页面需要验证证书)

jquery – CORS:访问需要身份验证的Web服务(ASP.NET表单)(访问页面需要验证证书)

我正在尝试在托管多个WCF服务的现有asp.net网站上启用CORS.不幸的是,我很难让它发挥作用.乍一看,我被重定向到登录页面(不存在),因此自定义身份验证服务生成的身份验证cookie可能有问题.

在继续之前,这里是我当前场景的简单描述:

>我有站点A,它暴露了几个Web服务(除了
身份验证服务只能由经过身份验证的用户访问),
和站点B,它有一个试图与Web交互的页面
服务
>为了复制这个场景,我已经把它了
在同一个地方为html页面提供服务,我创建了一个别名
(主持人文件)为了模拟cors电话(让我说我已经
叫它outro.pt)
>使用生成身份验证cookie
FormsAuthentication.GetAuthCookie然后将其添加到
通过调用Response.AppendCookie方法进行响应
>身份验证按预期工作:首先是OPTIONS调用,然后是POST
呼叫;当第二个Web服务被调用(再次POST)时,没有
预检检查(因为第一次通话最终产生了一个
Access-Control-Max-Age标头,用于缓存预检检查
5分钟),但网站(outro.pt)最终返回302
将浏览器重定向到登录页面.

在继续之前,这里是用于处理预检和允许cors调用的演示代码(我将它放在应用程序的beginrequest事件中):

private void Application_BeginRequest(object sender,EventArgs e) {
    var ctx = HttpContext.Current;

    //allow credentials: always
    ctx.response.addheader("Access-Control-Allow-Credentials","true");

    //add allow origin header
    if (ctx.Request.Headers["Origin"] != null) {
        ctx.response.addheader("Access-Control-Allow-Origin",ctx.Request.Headers["Origin"]);
    }

    if (ctx.Request.Headers["Access-Control-Request-Headers"] != null) {
        ctx.response.addheader("Access-Control-Allow-Headers",ctx.Request.Headers["Access-Control-Request-Headers"]);
    }

    if (ctx.Request.HttpMethod.toupper() == "OPTIONS" ) {
        ctx.response.addheader("Access-Control-Allow-Methods","POST,GET,OPTIONS");
        //keep preflight info for 5 mins
        ctx.response.addheader("Access-Control-Max-Age",(5 * 60).ToString());
        ctx.Response.End();
        return;
    }
}

现在,这是用于生成身份验证cookie的演示代码(因为这是演示代码,我选择使用简单的通用处理程序:

public void ProcessRequest(HttpContext context) {
        context.Response.ContentType = "application/json";
        var name = "";
        using (var reader = new StreamReader(context.Request.InputStream)) {
            var std = (Student)JsonConvert.DeserializeObject(reader.ReadToEnd(),typeof(Student));
            name = std == null ? "" : std.name;
        }
        if (!String.IsNullOrEmpty(name)) {
            var cookie = FormsAuthentication.GetAuthCookie(name,false);              
            cookie.Domain = "outro.pt";
            context.Response.AppendCookie(cookie);
            context.Response.Write(JsonConvert.SerializeObject(new {valid = true}));
        }
        else {
            context.Response.Write(JsonConvert.SerializeObject(new { valid = false }));    
        }

    }

现在,在使用fiddler之后,我可以看到在调用验证处理程序时确实会返回cookie.例如,这是通过调用先前的身份验证处理程序创建的一个cookie的示例:

设置Cookie:.ASPXAUTH = 1CB7EF39DBA39BDA2FD2AA0A0AAFDAB67821A286D04F1678C89CFD6036094A3F9C36D2C9E48FFE35B95C8A742F553138A8899E2CE63259F6DDC7A4D59868AF8A3F50EC037F1DAB73827B5D906A115C28FC8E4B744D661AF77592955F525E236D;域= outro.pt;路径= /;仅Http

乍一看,我认为这个身份验证cookie没有任何问题(我认为它与正确的域名相关联,每当我点击outro.pt中的任何页面时都应该发送它,对吧? – 即使它放在另一个域内也是如此asp.net app,比方说outro.pt/demo/webservice.ashx?)

由于当我尝试访问第二个Web服务时,我被重定向到登录页面,我认为问题是没有发送身份验证cookie.这是正确的:根据提琴手的说法,第二次通话的请求标头中没有发送任何cookie.我尝试过几件事,但我无法让它发挥作用.

阅读文档之后,我认为将withCredentials字段设置为true是我发送cookie所需要做的唯一事情,对吗?顺便说一句,这是使用jquery2执行的第二个Web服务调用:

var complete = url + "studentservice.ashx";
    payload = {
                    url: complete,type: 'POST',xhrFields: {
                        withCredentials: true
                    },contentType: 'application/json',crossDomain: true,dataType: 'json'
                };
    $.ajax(payload)
                    .done(function (data,status,xhr) {
                        alert("success");

                    })
                    .fail(function (xhr,error) {
                        alert("error" + error);
                    });

那么,当需要访问的Web服务需要asp.net身份验证时,是否有人设法使用cors?我错过了什么?

谢谢.

解决方法

我想我已经发现了问题:用于验证用户(并生成cookie)的$.ajax方法调用不是withCredentials字段,因此从服务器返回的cookie最终被丢弃.
@H_301_66@

asp.net web-api – ASP.net Web API RESTful Web服务基本身份验证

asp.net web-api – ASP.net Web API RESTful Web服务基本身份验证

我正在使用ASP.Net Web Api实现RESTful Web服务。我已经得出结论使用基本认证SSL做认证部分。什么是最好/正确的方法来实现呢?

我的第一个尝试是手动,解析授权头,解码和验证用户对我的数据库。它的工作,但我不知道,如果我缺少的东西。

我见过一些使用用户角色和原则的解决方案。虽然我不知道这些实际做什么,我几乎肯定我不会需要这些,因为在我的数据库中,我定义了我自己的用户和他们的角色。

还有我还没有完全理解,是如果服务的消费者必须发送凭证与每个请求或他们以某种方式缓存。我的服务应该做些什么才能发生,还是完全由消费者来处理?

最后一个问题关于客户使用javascript请求。如果他们尝试使用该服务,是否会出现任何“跨域请求”问题?

解决方法

Jamie Kurtze提供了使用基本身份验证在这里 ASP.NET Web API REST Security Basics的一个很好的解释

从我的理解,如果你想要你的请求是无状态的,那么每个请求将需要设置验证字段

Jamie Kurtze在从DelegateHandler派生的类中包装必要的代码,而Rick Strahl使用过滤器检查调用是否有效。你可以在他的博客文章阅读更多在这个主题在A WebAPI Basic Authentication Authorization Filter

asp.net – SSO表单身份验证问题.无法解密身份验证Cookie

asp.net – SSO表单身份验证问题.无法解密身份验证Cookie

我正在尝试在2个Web应用程序,应用程序A和应用程序B之间开发SSO身份验证.应用程序A是MVC 4应用程序,应用程序B是MVC 3应用程序.

应该发生的是:

>当用户尝试访问应用程序B时,他将被重定向到应用程序A的登录页面
>登录到应用程序A后,他将被重定向到应用程序B.

实际发生的是:

>用户尝试访问应用程序B,他被重定向到应用程序A进行登录
>用户登录到应用程序A,他被重定向到应用程序B.
>这里出了问题,因为应用程序B将用户重定向回应用程序A进行登录,就好像他还没有登录一样

我已经完成了这些步骤来找出错误:

>确认身份验证cookie正在传递给应用程序B.
>确认web.config中的两个应用程序的机器密钥验证和解密密钥相同
>在web.config中启用了已确认的enableCrossAppRedirects
>我使用此论坛帖子中的代码来确定两个应用程序是否都能解密身份验证cookie:http://forums.asp.net/t/1762166.aspx/1
>身份验证cookie在应用程序A中成功解密,但在应用程序B中未成功解密.应用程序B在FormsAuthentication.Decrypt方法中提供“无法验证数据”异常

谁能帮我这个?为什么解密失败,即使他们使用相同的机器密钥?我还能依靠这种身份验证方法吗?因为这篇文章说它不再可靠了.
http://blog.appharbor.com/2012/02/22/asp-net-forms-authentication-considered-broken

谢谢!

解决方法

Uf ..终于找到了问题.问题是因为应用程序A的目标是.NET Framework 4.5,而应用程序B的目标是.NET Framework 4.

我以前怀疑过,但显然在项目属性中更改目标框架是不够的.您必须添加此< httpRuntime targetFramework =“4.5”/>应用程序B web.config使其工作.

asp.net – 使用jQuery ajax进行表单身份验证

asp.net – 使用jQuery ajax进行表单身份验证

我正在尝试使用 jquery实现身份验证,以对页面方法发出ajax请求,该方法将对用户进行身份验证.这是我在下面编写的基本示例.实际应用程序更复杂,并且不使用页面方法来处理身份验证.问题是User对象中的isAuthenticated属性始终为false.这个项目是在vb中完成的,但我不介意答案/代码是否在c#中.

Ajax请求:

$.ajax({
    type: 'POST',url: 'default.aspx/authenticateUser',data: "{ username: '" + username + "',password: '" + password + "' }",contentType: "application/json; charset=utf-8",dataType: "json",success: function (d) {
        if (d.d == true) {
            window.location.href = '/registrants/home.aspx';
        }            
    }
});

页面方法:

<WebMethod()>
Public Shared Function authenticateUser(ByVal username As String,ByVal password As String) As Boolean
    If (isAuthenticated(username,password)) Then
        Dim ticket As New FormsAuthenticationTicket(1,username,DateTime.Now,DateTime.Now.AddMinutes(3),False,"member")
        Dim cookie As New HttpCookie(FormsAuthentication.FormsCookieName,FormsAuthentication.Encrypt(ticket))
        HttpContext.Current.Request.Cookies.Add(cookie)
        Return True
    End If
    Return False
End Function

解决方法

看来这个问题是由于我误解了何时使用HttpContext.Current.Request和HttpContext.Current.Response.简单的错误.我找到了答案 here.一旦请求被发送到页面方法进行验证,就必须使用HttpContext.Current.Response设置cookie并使用HttpContext.Current.Request检索.

asp.net – 使用带有模拟的Windows身份验证的Web应用程序的IIS

asp.net – 使用带有模拟的Windows身份验证的Web应用程序的IIS

我没有使用它,但这是一个有趣的问题.
如果我在IIS上设置Web应用程序以使用 Windows身份验证并模拟经过身份验证的用户和我的ConnectionString到sqlServer数据库使用Integrated Security = true;,我的应用程序在尝试连接到数据库时将使用应用程序验证的用户?

如果是的话,这是一件好事吗?
(该数据库具有LDAP / AD“域用户”权限.考虑一个可审计的数据库,其中每个用户都将记录您的操作.)

解决方法

是的,与sql Server的连接将在这些用户之下.

一般来说,这并不好.但这取决于具体情况.以下是需要考虑的主要因素:

>每个用户都需要自己的连接.即使使用连接池,也无法重用来自不同用户的连接.创建连接是相对昂贵的操作.每个连接都需要一点内存>每个用户都需要登录(或者至少是用户所属的Windows组需要登录).这可以是创建登录等的额外维护.另一方面,可以以不同的方式保护每个这样的登录.重要的是,如果使用单个帐户连接到sql Server,也可以实现为不同用户保护对象

关于jquery – CORS:访问需要身份验证的Web服务(ASP.NET表单)访问页面需要验证证书的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于asp.net web-api – ASP.net Web API RESTful Web服务基本身份验证、asp.net – SSO表单身份验证问题.无法解密身份验证Cookie、asp.net – 使用jQuery ajax进行表单身份验证、asp.net – 使用带有模拟的Windows身份验证的Web应用程序的IIS等相关知识的信息别忘了在本站进行查找喔。

本文标签: