C# 使用SAML和AJAX进行单点登录

C# 使用SAML和AJAX进行单点登录,c#,.net,ajax,single-sign-on,saml,C#,.net,Ajax,Single Sign On,Saml,我们正在基于.NET中的SAML消息实现单点登录(身份提供者端)。当用户想要使用某些服务时,他会被重定向到我们这边,并显示SAML请求消息。SAML消息在页面加载时接收并存储在全局变量中。我们在applet中显示他,该applet在浏览器(客户端)中读取他的智能卡,然后这些数据(只有一个字符串)由AJAX发送到服务器端,我们在服务器端处理数据并进行一些验证检查,然后将SAML响应返回给服务提供商 问题-该场景不起作用,SAML响应消息未发送,用户未登录 有用信息: 如果删除applet(没有Aj

我们正在基于.NET中的SAML消息实现单点登录(身份提供者端)。当用户想要使用某些服务时,他会被重定向到我们这边,并显示SAML请求消息。SAML消息在页面加载时接收并存储在全局变量中。我们在applet中显示他,该applet在浏览器(客户端)中读取他的智能卡,然后这些数据(只有一个字符串)由AJAX发送到服务器端,我们在服务器端处理数据并进行一些验证检查,然后将SAML响应返回给服务提供商

问题-该场景不起作用,SAML响应消息未发送,用户未登录

有用信息:

  • 如果删除applet(没有Ajax,只是通过POST方法将数据以表单形式发送到服务器端的经典按钮),它工作得非常好-正在发送SAML响应消息,用户已登录,但我需要该applet,它将从任何计算机读取用户智能卡

  • AJAX调用工作正常,我接收AJAX发送的数据。我调试了代码,它一直执行到最后,但SAML消息没有发送,也没有必须根据SP等待的SAML响应消息进行重定向

        try {
            $.ajax({
                type: "POST",
                url: "SmartAuth.aspx/GetData",
                data: "{mbo : '" + CMBO.toString() + "', serbr : '" + CSerial.toString() + "', notbefore : '" + CNotBefore.toString() + "', notafter : '" + CNotAfter.toString() + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                window.close()},
                failure: function (msg) {
                alert('Failure');},
    
            });
        } catch (e) {
            alert('Ajax error: ' + e.message);
            throw (e); 
            return 0;
        }
    
  • 所以,我的结论是,当我同时使用AJAX和SAML时,会产生问题,可能AJAX连接没有关闭,所以SAML消息无法发送。他们都使用HTTP,所以可能在协议层面上有一些冲突-我不知道,这些只是假设,我希望你能帮助我的想法


    谢谢

    我不清楚在AJAX
    成功后,您试图从何处发出重定向。您是否尝试触发(隐藏的)页面表单提交?目标URL在SAML响应消息中定义,Ajax只需要将数据发布到服务器,就这样。然后我们处理数据,创建SAML响应并发送它。我们的工作完成了,但我认为Ajax连接是开放的,不允许通过HTTP发送消息。