sustainsys-saml2 - 如何在控制器操作方法中获取 SAML 响应和 SAML 令牌
问题描述
我在使用SUstainsys.SAaml2
库的 CALLback url 中使用此代码:
public ActionResult Callback()
{
var samlToken = (Saml2SecurityToken)null;
var samlResponses = HttpContext.Request.Form["SAMLResponse"]; HttpContext.Current.Request.Form["SAMLResponse"]; or elsewhere.
//if (form.Count() > 0)
//{
// var samlResponses = form.GetValues("SAMLResponse");
if (samlResponses != null)
{
foreach (var samlResponse in samlResponses)
{
try
{
var decodedSamlResponse = Convert.FromBase64String(samlResponse.ToString());
var reader = XmlReader.Create(new MemoryStream(decodedSamlResponse));
var serializer = new XmlSerializer(typeof(XmlElement));
var samlResponseElement = (XmlElement)serializer.Deserialize(reader);
var manager = new XmlNamespaceManager(samlResponseElement.OwnerDocument.NameTable);
manager.AddNamespace("saml2", "urn:oasis:names:tc:SAML:2.0:assertion");
var assertion = (XmlElement)samlResponseElement.SelectSingleNode("//saml2:Assertion", manager);
//var samltoken= Options.FromConfiguration.SPOptions.Saml2PSecurityTokenHandler.ReadToken(XmlReader.Create(new StringReader(assertion.OuterXml)));
samlToken = (Saml2SecurityToken)Options.FromConfiguration.SPOptions.Saml2PSecurityTokenHandler.ReadToken(XmlReader.Create(new StringReader(assertion.OuterXml)));
break;
}
catch { }
}
}
ViewBag.SamlResponse = samlResponses;
ViewBag.SamlToken = samlToken;
return View();
}
但我在 SAML 响应中得到空值。
解决方案
该功能内置于 中AcsCommand
,您不应该自己做。
查看 repo 中的示例并使用 HttpModule、Mvc 控制器或 Owin 中间件(取决于您拥有的应用程序类型)。
推荐阅读
- javascript - react, setState 并让组件重新渲染
- python - 如何在 jupyter notebook 上自动完成?
- dropzone.js - dropzone.js - 如何通过 api 触发文件上传?
- mongodb - findOneAndUpdate 中使用 $set 的聚合查询不更新文档
- json - 如何将bash变量添加到json文件?
- reactjs - 使用 React 钩子设置状态时引发跨源错误
- ruby-on-rails - 使用 rspec 测试具有产量的方法
- html - 选择元素后具有特定类的第一个兄弟
- numpy - 使用带有 numpy 或 scipy 数组的阶乘的混淆错误
- c# - 如果我设置版本,OData 元数据 url 请求将失败