[英]Unable to get SAMLResponse from Request.Params in C# from onpremise app configured with Azure SAML SSO
我已经使用Azure App Proxy和SAML SSO配置了Onpremise MVC 应用程序。
当我浏览以下内部部署应用程序用户访问 url 时,我能够重定向到内部部署应用程序。
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 ,但它没有发生。
请帮我解决这个问题。
从评论中移动答案,
Request.Params
是已包含您的 SAML 信息的键/值对(集合)的组合。您需要遍历它以获取确切数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.