Okta Kentor.AuthServices IdentityServer3 IDP发起的SSO正在触发SP发起的SSO - 错误还是设计?

时间:2016-11-28 09:36:05

标签: saml-2.0 identityserver3 okta kentor-authservices

使用IdentityServer3,Kentor.AuthServices 0.19(带有OWIN中间件)和标准的MVC 4 WebApi 2应用程序,我们遵循https://github.com/KentorIT/authservices/blob/master/doc/IdentityServer3Okta.md的说明 似乎我们成功实现了IDP发起的登录。

然而,当我们仔细研究这个问题并使用KentorStubIdp(我们首先注意到我们被提示提供SAML响应)时,我们发现了以下内容

  1. IDP点击我们的终点,例如identityserver / okta / acs,status 303
  2. 成功重定向到我们的应用程序中的重定向端点,该端点被编码为返回重定向到身份服务器授权端点,因此 var client = new AuthorizeRequest(new Uri(identityServerUrl + "connect/authorize")); var returnUrlForIdp = client.CreateAuthorizeUrl( "{client_identifier}", "id_token token", scopesForAuth, hostUrl, state, nonce, acrValues: string.Format("idp:{0}", idp), responseMode: "form_post" ); return Redirect(returnUrlForIdp);
  3. 这导致302到identityserver / connect / authorize。它似乎拥有它需要的所有登录信息,我本来期望200直接进入应用程序,但我们得到302到身份服务器/登录?signin = xxx,它给出了一个401似乎触发... < / LI>
  4. 对登录端点的后续调用将获得303重定向回IDP,这标志着最终成功的SP启动登录的开始。这意味着它返回到identityserver / okta / acs,然后是/ callback端点,然后/ connect / authorize然后用户登录。
  5. 除了

    之外,我在/ connect / authorize的第一次和第二次调用之间找不到任何有意义的区别
    1. 成功尝试之前是调用identityserver / callback
    2. idsvr和idsvr.session的Cookie似乎没有在第一次通话时设置,但在第二次通话中
    3. 此外,Kentor配置设置似乎是有序的 - 例如 AllowUnsolicitedAuthnResponse = true AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Passive虽然这最后一个似乎没有任何影响

      此时我只想弄清楚a)这是否应该如何在幕后工作; b)如果没有,我应该把注意力集中在哪里来诊断问题。

      如果一个IDP发起的SAML请求缺少信息,是否有一组特定的环绕触发authservices来启动SP发起的SAML请求?

      任何建议都非常感谢。

1 个答案:

答案 0 :(得分:1)

使用Idp启动的登录与SAML2 + OIDC有点棘手,因为OIDC不支持它。这意味着IdSrv3并非真正为该场景构建。

您需要的概要是:

  1. Idp向IdSrv3 / AuthServices发送未经请求的响应。
  2. AuthServices验证响应
  3. IdSrv3在IdSrv3上建立登录会话。
  4. 用户被重定向到客户端应用程序的登录init url
  5. 客户端应用程序向IdSrv3发起OIDC签名。
  6. IdSrv3在3中建立会话的单点登录。
  7. 用户重定向回客户端应用程序。
  8. 看起来第2步有效,但第3步未正确完成。这意味着在步骤6中没有会话,因此用户被重定向到Idp以获取现有会话。这有效,但有点难看。如果您以后想要单点注销,则会话计数不匹配可能会导致问题。