【发布时间】:2016-11-28 09:36:04
【问题描述】:
使用 IdentityServer3、Kentor.AuthServices 0.19(带有 OWIN 中间件)和标准 MVC 4 WebApi 2 应用程序,我们已按照https://github.com/KentorIT/authservices/blob/master/doc/IdentityServer3Okta.md 的说明进行操作 看来我们成功地实现了 IDP 发起的登录。
但是,当我们仔细查看此内容并使用 KentorStubIdp(我们首先注意到我们被提示提供 SAML 响应的地方)时,我们发现了以下内容
- IDP 到达我们的端点,例如身份服务器/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 请求?
非常感谢任何建议。
【问题讨论】:
-
你能看到在步骤1中是否成功设置了cookie吗? IE。如果 AuthServices 身份验证创建 IdSrv 登录会话?
-
@AndersAbel 如果我使用 KentorStubIdp,那么它会返回 SP 发起的尝试(即从 IDP 发起的 stubidp.kentor(点击登录)> IdentityServer/stubidp/acs > RpRedirect > IdentityServer/Connect/Authorise > stubidp.kentor?SAMLRequest=xxx),有 3 个 cookie:Kentor.xxxxxx、idsrv.external 和 signinmessage.#######。我不确定这是否构成登录会话,我猜不是?
标签: saml-2.0 identityserver3 okta kentor-authservices