使用IdentityServer3,Kentor.AuthServices 0.19(带有OWIN中间件)和标准的MVC 4 WebApi 2应用程序,我们遵循https://github.com/KentorIT/authservices/blob/master/doc/IdentityServer3Okta.md的说明 似乎我们成功实现了IDP发起的登录。
然而,当我们仔细研究这个问题并使用KentorStubIdp(我们首先注意到我们被提示提供SAML响应)时,我们发现了以下内容
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);
除了
之外,我在/ connect / authorize的第一次和第二次调用之间找不到任何有意义的区别此外,Kentor配置设置似乎是有序的 - 例如
AllowUnsolicitedAuthnResponse = true
和
AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Passive
虽然这最后一个似乎没有任何影响
此时我只想弄清楚a)这是否应该如何在幕后工作; b)如果没有,我应该把注意力集中在哪里来诊断问题。
如果一个IDP发起的SAML请求缺少信息,是否有一组特定的环绕触发authservices来启动SP发起的SAML请求?
任何建议都非常感谢。
答案 0 :(得分:1)
使用Idp启动的登录与SAML2 + OIDC有点棘手,因为OIDC不支持它。这意味着IdSrv3并非真正为该场景构建。
您需要的概要是:
看起来第2步有效,但第3步未正确完成。这意味着在步骤6中没有会话,因此用户被重定向到Idp以获取现有会话。这有效,但有点难看。如果您以后想要单点注销,则会话计数不匹配可能会导致问题。