Null: ссылка на объект во время AssertionConsumerService => saml2AuthnResponse.CreateSession - PullRequest
1 голос
/ 01 апреля 2020

Я использую ITFoxte c .Identity.Saml2. Mvc (v4.5.0) в MVC. NET (платформа 4.7.2). И мой IdP сообщает об успешной аутентификации ... перенаправление назад ... Но когда я получаю свой ответ от IdP - я получаю нулевое исключение, скрытое в этом вызове. К сожалению, он не дает мне номер строки или что-нибудь полезное, чтобы отследить его.

saml2AuthnResponse.CreateSession()

Я попробовал несколько способов создания пакета nuget, чтобы заставить его выйти из системы там, где он выходит из строя - но так далеко не повезло с этим при использовании / обращении извне пакета. Я установил другие параметры в файле web.config следующим образом:

<add key="Saml2:CertificateValidationMode" value="PeerOrChainTrust" />
<add key="Saml2:RevocationMode" value="NoCheck" />

Мой AssertionConsumerService практически идентичен примеру с вашего сайта:

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);
}

В отладке printf на Saml2ResponseExtensions.cs CreateSession () ln.19 Я могу сказать, что он (вероятно?) Не выдает перед этой строкой (потому что я могу скопировать + вставить заново все предыдущие переменные во внешней области видимости, без проблем).

var sessionSecurityToken = lifetime.HasValue 
    ? new SessionSecurityToken(transformedPrincipal, lifetime.Value) 
    ...

@ AndersRevsgaard Есть идеи?

1 Ответ

1 голос
/ 01 апреля 2020

Я отследил это до этой строки, которая выдает ошибку 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>

Вы можете просмотреть ITFoxTe c test web.config для полного примера: https://github.com/ITfoxtec/ITfoxtec.SAML2/blob/master/WebAppTest/Web.config

...