使用 IdentityServer3、Kentor.AuthServices 0.19(带有 OWIN 中间件)和标准 MVC 4 WebApi 2 应用程序,我们按照https://github.com/KentorIT/authservices/blob/master/doc/IdentityServer3Okta.md上的说明进行操作 ,它出现了我们成功实现了 IDP 发起的登录。
然而,当我们仔细观察并使用 KentorStubIdp(我们第一次注意到我们被提示提供 SAML 响应的地方)时,我们发现了以下内容
- IDP 命中我们的端点,例如 identityserver/okta/acs,状态 303
- 在我们的应用程序中成功重定向到我们的重定向端点,该端点被编码为将重定向返回到身份服务器授权端点,因此
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);
- 这导致身份服务器/连接/授权的 302。看起来这有它需要的所有登录信息,我本来希望 200 直接进入应用程序,但是我们得到一个 302 到 identityserver/login?signin=xxx ,它给出了一个 401 似乎触发......
- 随后对登录端点的调用将 303 重定向回 IDP,这标志着 SP 发起的最终成功登录的开始。这意味着它返回到 identityserver/okta/acs,然后是 /callback 端点,然后是 /connect/authorise,然后用户登录。
我在第一次和第二次调用 /connect/authorise 之间找不到任何有意义的区别,除了
- 在成功尝试之前调用 identityserver/callback
- idsvr 和 idsvr.session 的 Cookie 似乎不是在第一次调用时设置的,而是在第二次调用中设置的
此外,Kentor 配置设置似乎是有序的 - 例如
AllowUnsolicitedAuthnResponse = true
,
AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Passive
尽管最后一个似乎没有任何效果
在这一点上,我只是想弄清楚a)这是否应该在幕后工作,b)如果不是,我应该把注意力集中在哪里来诊断问题。
如果 IDP 发起的 SAML 请求缺少信息,是否有一组特定的情况会触发 authservices 发起 SP 发起的 SAML 请求?
非常感谢任何建议。