当前位置: 首页 > 知识库问答 >
问题:

奥克塔肯特。AuthServices IdentityServer3 IDP启动的SSO正在触发SP启动的SSO -错误还是设计?

梁丘烨
2023-03-14

使用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到达我们的endpoint,例如身份服务器/okta/acs,状态303
  2. 在我们的应用程序中成功重定向到我们的重定向endpoint,该endpoint被编码为返回重定向到标识服务器授权endpoint,因此var客户端=new AuthorizeRequest(new Uri(标识ServerUrl“连接/授权”)); var returUrlForIdp=client.CreateAuthorizeUrl(“{client_identifier}”、“id_token令牌”、范围ForAuth、主机Url、状态、nonce、acrValue:string.Format(“idp:{0}”,idp),响应模式:“form_post”);返回重定向(returUrlForIdp);
  3. 这会导致302到标识服务器/连接/授权。似乎这包含了它需要的所有登录信息,我本以为直接进入应用程序会有200个,但我们得到了302到标识服务器/login? signin=xxx,这给出了一个401,似乎触发了...
  4. 对登录endpoint的后续调用将获得303重定向回IDP,这标志着最终成功的SP发起的登录的开始。这意味着它会返回身份服务器/okta/acs,然后是 /callbackendpoint,然后 /connect/authorise然后是用户登录。

我找不到第一次和第二次调用/connect/authorise之间有任何有意义的区别,除了

  1. 成功的尝试之前是对标识服务器/回调的调用
  2. idsvr和idsvr.session的Cookie似乎没有在第一次调用时设置,但在第二次调用中

此外,Kentor配置设置似乎是有序的-例如AllowUnsolicitedAuthnResponse=trueAuthenticationMode=Microsoft.Owin.Security.AuthenticationMode。被动,尽管最后一个似乎没有任何效果

在这一点上,我只是想弄清楚a)这是否是它应该在幕后工作的方式,b)如果不是,我应该把注意力集中在哪里来诊断问题。

如果IDP发起的SAML请求缺乏信息,是否有一组特定的循环触发Authservice发起SP发起的SAML请求

非常感谢任何建议。

共有1个答案

顾文昌
2023-03-14

在SAML2 OIDC中使用Idp发起的登录有点棘手,因为OIDC不支持它。这意味着IdSrv3也不是针对该场景构建的。

你需要的概要是:

  1. Idp 向 IdSrv3/AuthServices 发送未经请求的响应。
  2. 身份验证服务验证响应
  3. IdSrv3 在 IdSrv3 上建立登录会话。
  4. 用户被重定向到客户端应用程序的登录 init url
  5. 客户端应用程序在 IdSrv3 中启动一个 OIDC 签名。
  6. IdSrv3 使用在 3 中建立的会话进行单一登录。
  7. 用户被重定向回客户端应用。

看起来步骤 2 有效,但步骤 3 未正确完成。这意味着在步骤 6 中没有会话,因此用户将一直重定向到 Idp 以选取现有会话。这有效,但有些丑陋。如果您以后想要进行单点登录,则存在会话计数不匹配,这可能会导致问题。

 类似资料:
  • 我已经配置了OpenAM IdP和SP。我正在纠结于IdP发起的SSO URL和SP发起的SSO URL。我使用以下格式的IdP发起的单点登录网址。但是我得到错误< code >服务提供商ID为空。 http://testtestidam.com:8080/openam/idpssoinit?metaAlias=/realm1/idp 任何人都可以帮忙吗?

  • 我正在进行SP启动的SSO。 IDP是PingOne 我一直在做IDP发起的SSO。 因此,我们有IDP启动的SSO设置,一切都很正常。我们现在必须让它启动。 我理解它背后的理论,但我不知道如何实施它! 到目前为止,我在想我需要给他们的网址是这样的,也许???: https://sso/saml2/jsp/spSSOInit.jsp?metaAlias=/{idpRealm}/sp 但是当我击中它

  • 如何从SAML响应中判断是SP启动的SSO还是IDP启动的SSO?是否有一个属性告诉我是谁发起了SSO? 例如,在这个StackOverflow问题中:SP发起的SSO和IDP发起的SSO之间的差异,他们讨论了差异,但没有谈论XML级别本身...... SAML响应如下所示:

  • 我已成功配置SAML SSO,其中OpenAM为SP,PingFederate为IDP,SP启动SSO并使用重定向后绑定。我正在使用kerberos适配器实现SSO。 但是,我无法将RelayState参数从OpenAM传递给PF,并在成功验证后将其作为SAML自动post表单的一部分取回。它总是重定向到OpenAM断言处理服务,即OpenAM/metalias/sp 我试过的事情- > SAML

  • 我是KeyClope的新手,正在尝试将其配置为SalesForce客户端的SAML IDP。IDP启动的SSO流工作正常。我被引导到Salesforce主页正确地进行身份验证。然而,SP启动的SSO给了我一个JSON输出,而不是KeyClope登录页面。 这是SalesForce重定向到的URL(屏蔽IP):http://10.99.xxx.xxx:8080/auth/realms/test?SA

  • 我使用SPRING SAML实现并充当SP(例如:ALPHA)。我能够执行SP启动的SSO,并能够使用IDP对用户进行身份验证。此实现中没有问题。 但在我的应用程序中,我需要访问另一个与同一IDP链接的SP(例如:BETA)url。ALPHA和BETA服务提供商都受到同一IDP的信任。在这种情况下,在通过SP INIT SSO使用IDP对用户进行ALPHA身份验证后,当BETA SP URL发生重