0

我正在使用 owin 管道实现 SP 启动的 SAML 身份验证登录(使用 Sustainsys saml 库)。我在接收配置的 acs url 上的 saml 响应时遇到问题。从 IDP 接收到 saml 响应并且用户成功登录,但是当我尝试在 ACS url 端点读取 saml 响应时,该方法永远不会在调试流程中命中。

我相信ACS端点是从idp(idp-browser和browser-acs端点)发回saml响应的地方,有人可以指出为什么在浏览器上收到saml响应但没有重定向到ACS URL的问题。

在 IDP 和 SP 端配置 ACS url。我可以在 Saml 请求中看到正确的 ACS 网址。

Sustainsys.Saml2.Owin.Saml2AuthenticationMiddleware Verbose: 0 : Signature validation passed for Saml Response Microsoft.IdentityModel.Tokens.Saml2.Saml2Id
Sustainsys.Saml2.Owin.Saml2AuthenticationMiddleware Verbose: 0 : Extracted SAML assertion <--Assertion_id-->
Sustainsys.Saml2.Owin.Saml2AuthenticationMiddleware Information: 0 : Successfully processed SAML response Microsoft.IdentityModel.Tokens.Saml2.Saml2Id and authenticated <--User-->
Application Insights Telemetry (unconfigured): ":,"ai.location.ip":"::1","ai.internal.sdkVersion"},"data":{"baseType":"RequestData","baseData":{"ver":2,"id":"|/WNNPHCMHVk=.56095c49_","name":"POST <--ACS URL- BASE URL-->","duration":"00:00:00.2807934","success":true,"responseCode":"303","url":"<--ACS URL-->","properties":{"DeveloperMode":"true","_MS.ProcessedByMetricExtractors":"(Name:'Requests', Ver:'1.0')"}}}}
4

2 回答 2

0

我已将身份验证类型设置为 ExternalCookie,但它仍然无法通过 saml 响应到达我的 acs url。对 acs url 的 POST 请求返回 303 状态码

在启动中

app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
 AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
 CookieSecure = CookieSecureOption.Always,
 ExpireTimeSpan = TimeSpan.FromMinutes(30),
 LoginPath = new PathString("/Account/SignIn"),
 SlidingExpiration = true,
});
 app.SetDefaultSignInAsAuthenticationType(DefaultAuthenticationTypes.ExternalCookie);
 app.UseSaml2Authentication(CreateSaml2Options());

public ActionResult ExternalLogin(string provider, string rURL, string uname)
{
 return new ChallengeResult(provider, 
                            Url.Action("ExternalLoginCallback",
                            "Account"), uname);
}

ACS 端点

[HttpPost]
public ActionResult Acs(string username, string samlResponse)
{
         ......
} 

如果任何人都可以对此提供一些意见,那将非常有帮助。

于 2019-10-17T20:13:54.210 回答
0

ACS 端点由库实现。正如您的日志中所见,它已成功完成。

然后库使用配置的登录方案发出登录,这通常是外部 cookie 方案(但也可以是应用程序 cookie 方案)。这可能是您的代码中未正确配置的东西。

于 2019-07-03T20:33:08.130 回答