使用SAML2库实现SP启动的方案

时间:2019-01-09 22:52:26

标签: sustainsys-saml2

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

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

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

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

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

我们的客户(按SSO术语IDP-标识提供商)正在使用: 在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启动的情况,我在网上找到的所有内容都没有示例或清楚的解释。

1 个答案:

答案 0 :(得分:0)

  1. 该问题称为“家庭领域发现”。用户莫名其妙地选择了。有时,这是通过显示用户可以选择的Idps列表来完成的。有时,可以通过为不同的用户(例如customerX.myservice.com)提供不同的URL来完成,其中每个customerX子域都映射到特定的IDp。 Sustainsys.Saml2库支持SAML2发现服务标准来处理此问题。

  2. 您自己正在使用低级的Sustainsys.Saml2库,它为您提供了很多处理功能。它不能直接使用。请改用Sustainsys.Saml2.Owin或Sustainsys.Saml2.Mvc高级库。它将进行重定向并为您处理返回的结果。

  3. 请参阅2。