无法从使用 Azure SAML SSO 配置的本地应用程序中的 C# 中的 Request.Params 获取 SAML 响应
Posted
技术标签:
【中文标题】无法从使用 Azure SAML SSO 配置的本地应用程序中的 C# 中的 Request.Params 获取 SAML 响应【英文标题】:Unable to get SAMLResponse from Request.Params in C# from onpremise app configured with Azure SAML SSO 【发布时间】:2021-01-12 02:37:37 【问题描述】:我已经使用 Azure App Proxy 和 SAML SSO 配置了 本地 MVC 应用。
当我在 onpremise 应用 user access 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 strong> 但它没有发生。
请帮我解决这个问题。
【问题讨论】:
嗨@Chandra,Request.Params 是键/值对(集合)的组合,其中已经包含您的SAML 信息。您需要遍历它以获取准确的数据。 【参考方案1】:来自 cmets 的移动答案,
Request.Params
是键/值对(集合)的组合,其中已经包含您的 SAML 信息。您需要遍历它以获得准确的数据。
【讨论】:
以上是关于无法从使用 Azure SAML SSO 配置的本地应用程序中的 C# 中的 Request.Params 获取 SAML 响应的主要内容,如果未能解决你的问题,请参考以下文章
无法更改 Spring 安全 SAML SSO 中的默认“回复 URL”(断言消费者服务位置)
如何在多租户环境中自动选择配置的 SAML 身份提供程序以使用 Spring SAML 进行 SSO