【问题标题】:Implement SP initiated scenario using SAML2 library使用 SAML2 库实现 SP 启动的场景
【发布时间】:2019-06-04 18:50:45
【问题描述】:

我们是服务提供商,正在尝试使用 SAML2 库来实施 SP 发起的 SSO。我有以下问题

  1. 当最终用户尝试访问受保护的 SP 应用程序/资源时,SP 端点应如何识别应将身份验证请求重定向到哪个 IDP?

  2. 是否有任何标准格式可以接受来自 IDP 用户的首次/初始请求?

  3. 在将请求重定向到 IDP 时,向 IDP 发送响应的标准格式是什么?

我们的技术栈: asp .net(4.5) MVC、C# 和 SAML2 Sustainsys 库

我们的客户(在 SSO 术语中为 IDP-Identify provider)正在使用: Azure AD 上由 SP 启动的 SAML

使用SAML2 库,我实现了 IDP 发起的 SSO,其中 IDP 通过 SAML 响应达到我们的终点,我们正在使用 IDP 证书验证它并提取属性等

所以对于 SP 发起,我得到了关注,

[Route("RequestAccess")]
[HttpPost]     
public ActionResult InitialRequest()
{
   // How to Identify user and its IDP url?
   // What should be the return type? (To redirect user to IDP)
}

// 一旦验证,IDP 可以访问我们现有的端点,该端点验证断言并重定向用户。我实现了这部分,并且在 IDP 启动设置的情况下运行良好。

[Route("AssertionConsumer")]
[HttpPost]
public ActionResult ValidateIdpRequest()
{
   var options = Saml2Controller.Options; //Coming from config
   CommandResult result = CommandFactory.GetCommand(CommandFactory.AcsCommandName)
                                     .Run(Request.ToHttpRequestData(),options);
string userName = result.Principal.FindFirst(ClaimTypes.NameIdentifier)?.Value;
//Set the cooking in response
//Return
}

我错过了什么?欢迎提出任何建议/问题。

对于 SP 发起的场景,我在网上找到的所有内容都没有示例或解释清楚。

【问题讨论】:

  • 请不要编辑您的问题以添加更多问题。如果我发布的答案涵盖了您最初的问题,则将其标记为已接受。将任何新问题作为新问题发布。
  • @AndersAbel 好的,谢谢。

标签: sustainsys-saml2


【解决方案1】:
  1. 这个问题被称为“家庭领域发现”。不知何故用户多选择。有时,这是通过提供用户可以选择的 Idps 列表来完成的。有时它是通过向不同的用户(例如 customerX.myservice.com)提供不同的 URL 来完成的,其中每个 customerX 子域映射到特定的 Idp。 Sustainsys.Saml2 库支持 SAML2 发现服务标准来处理此问题。

  2. 您自己正在使用低级 Sustainsys.Saml2 库,它可以让您自己处理很多事情。它并不意味着直接使用。请改用 Sustainsys.Saml2.Owin 或 Sustainsys.Saml2.Mvc 高级库。它将为您执行重定向并处理返回的结果。

  3. 见 2。

【讨论】:

  • 感谢您的详细解释。我已经用后续问题更新了问题。只是想在重定向请求时如何设置 AssertionConsumerUrl?再次感谢您!