我正在Mvc.NET(4.7.2框架(中运行ITFoxtec.Identity.Saml2.Mvc(v4.5.0(。我的IdP说成功认证。。。正在重定向回。。。但是当我从IdP得到响应时,我在这个调用中得到了一个null异常。不幸的是,它没有给我一个行号或任何有助于追踪它的东西。
saml2AuthnResponse.CreateSession()
我尝试了很多构建nuget包的方法,让它在失败的地方注销,但到目前为止,在使用/引用包外的内容时运气不佳。我在web.config中设置了如下其他设置:
<add key="Saml2:CertificateValidationMode" value="PeerOrChainTrust" />
<add key="Saml2:RevocationMode" value="NoCheck" />
我的断言ConsumerService与您网站上的示例几乎相同:
public ActionResult AssertionConsumerService()
{
var binding = new Saml2PostBinding();
var saml2AuthnResponse = new Saml2AuthnResponse(config);
binding.Unbind(Request.ToGenericHttpRequest(), saml2AuthnResponse);
saml2AuthnResponse.CreateSession(claimsAuthenticationManager: new SAMLDefaultClaimsAuthenticationManager());
var returnUrl = binding.GetRelayStateQuery()[relayStateReturnUrl];
return Redirect(string.IsNullOrWhiteSpace(returnUrl) ? Url.Content("~/") : returnUrl);
}
在Saml2ResponseExtension.cs CreateSession((ln.19上的打印调试中我可以判断它(可能?(没有在这行之前抛出(因为我可以在外部范围内复制+粘贴-重新创建所有前面的变量,没有问题(。
var sessionSecurityToken = lifetime.HasValue
? new SessionSecurityToken(transformedPrincipal, lifetime.Value)
...
@AndersRevsgaard有什么想法吗?
我一直追踪到这一行,它抛出了Null ref错误:
FederatedAuthentication.SessionAuthenticationModule.AuthenticateSessionSecurityToken(sessionSecurityToken, true);
虽然仍然很神秘,但这个答案解决了这个问题:是什么使FederatedAuthentication.SessionAuthenticationModule返回NULL?通过在web.config中添加一些节。
<configSections>
<section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</configSections>
<system.web>
<authentication mode="None" />
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</modules>
</system.webServer>
<system.identityModel.services>
<federationConfiguration>
<cookieHandler requireSsl="false" />
</federationConfiguration>
</system.identityModel.services>
您可以查看ITFoxTec测试web.config以获取完整示例:https://github.com/ITfoxtec/ITfoxtec.SAML2/blob/master/WebAppTest/Web.config