微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法从配置有Azure SAML SSO的本地应用程序中的C#中的Request.Params中获取SAMLResponse

如何解决无法从配置有Azure SAML SSO的本地应用程序中的C#中的Request.Params中获取SAMLResponse

我已经使用 Azure应用代理 SAML SSO 配置了内部部署 MVC应用。

当我在内部部署应用程序用户访问网址下浏览时,我能够重定向到内部部署应用程序。

https://myapps.microsoft.com/signin/...

但是 Request.Params.Keys 中缺少 SAMLResponse

我能够在 fiddler 中获得 SAMLResponse 的请求,当我对其进行解码时,我已经登录了所有与用户相关的声明。

但是从C#中,我无法从 Request.Params 获得 SAMLResponse

我正在使用以下代码读取声明。

  foreach (string s in Request.Params.Keys)
    {
        if (s.ToString() == "SAMLResponse") // SAMLResponse is missing from Request.Params.Keys,but from fiddler,I' able to view SAMLResponse
        {
            rawSamlData = Request.Params[s];
            break;
        }
    }

    if (rawSamlData != null)
    {
        byte[] samlData = Convert.FromBase64String(rawSamlData);

        // read back into a UTF string  
        string samlAssertion = Encoding.UTF8.GetString(samlData);

        XmlDocument doc = new XmlDocument();
        XmlNamespaceManager xMan = new XmlNamespaceManager(doc.NaMetable);
        xMan.AddNamespace("saml2p","urn:oasis:names:tc:SAML:2.0:protocol");
        xMan.AddNamespace("saml2","urn:oasis:names:tc:SAML:2.0:assertion");
        xMan.AddNamespace("ds","http://www.w3.org/2000/09/xmldsig#");

        doc.LoadXml(Encoding.UTF8.GetString(samlData));
        XmlNode xNode = doc.SelectSingleNode("/saml2p:Response/saml2:Assertion/saml2:AttributeStatement/saml2:Attribute[@Name='http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress']",xMan);

        string NewEmailAddressCliams = null;
        foreach (XmlNode x in xNode)
        {
            NewEmailAddressCliams += x.InnerText; // Email address returned from claim.
        }              
    }

如果我在 fiddler 中获得了 SAMLResponse ,那么我也应该使用 Request.Params从C#中获得 SAMLResponse 。 strong>,但没有发生。

请帮助我。

解决方法

从评论中移动答案,

Request.Params 是已经包含您的SAML信息的键/值对(集合)的组合。您需要遍历它以获取准确的数据。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。