Назад | Перейти на главную страницу

Приложение Windows Identity Foundation (WIF) + ADFS 2.0 в классическом конвейерном режиме - возможно ли это?

У меня есть работающее тестовое приложение, использующее Windows Idendity Foundation SDK и ADFS 2.0 для проверки подлинности, которое работает в Windows Server 2008 R2, IIS 7.5, в режиме пула приложений с интегрированным управляемым конвейером.

Моя проблема в том, что «настоящее» приложение, которое мне нужно настроить с таким типом аутентификации, может работать только в режиме пула классических управляемых конвейерных приложений из-за устаревшего кода, и когда я выбираю его, я получаю «HttpException (0x80004005): Не удалось Ошибка "Выполнить URL".

Есть у кого-нибудь идеи, как решить эту проблему?

ОБНОВЛЕНИЕ: я обнаружил, что https://example.com/myapplicatio/ дает мне ошибку, но https://example.com/myapplicatio/Default.aspx работает.

Мне удалось найти решение причины сбоя моего приложения с этой ошибкой.

В моей виртуальной среде я пытался получить экземпляр экстрасети MOSS 2007 для аутентификации с использованием сервера ADFS 2.0 с помощью SharePointClaimsMembershipProvider.

Подсказка, которую я получил из некоторых других ответов, заключалась в том, что идентификатор утверждения не заполнялся правильно, особенно при использовании анонимного доступа. Некоторые люди предоставили код для обработки ситуаций анонимного доступа.

В моем случае я проходил аутентификацию, но все еще получал эту ошибку. Итак, в основном проблема в том, что ADFS2.0 не предоставлял типы удостоверений утверждений, для которых было настроено мое приложение.

Вы можете увидеть, какие утверждения вы хотите получить для своего приложения, в файле web.config.

 <microsoft.identityModel>
    <service>
      <audienceUris>
        <add value="https://moss2007hv.kor.cmil.mil/" />
      </audienceUris>
      <applicationService>
        <claimTypeRequired>
          <!--Following are the claims offered by STS 'http://adfs.kor.cmil.mil/adfs/services/trust'. Add or uncomment claims that you require by your application and then update the federation metadata of this application.-->
          <claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name" optional="true" />
          <claimType type="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" optional="true" />
          <!--<claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress" optional="true" />-->
          <!--<claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname" optional="true" />-->
          <!--<claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn" optional="true" />-->
          <!--<claimType type="http://schemas.xmlsoap.org/claims/CommonName" optional="true" />-->
          <!--<claimType type="http://schemas.xmlsoap.org/claims/EmailAddress" optional="true" />-->
          <!--<claimType type="http://schemas.xmlsoap.org/claims/Group" optional="true" />-->
          <!--<claimType type="http://schemas.xmlsoap.org/claims/UPN" optional="true" />-->
          <!--<claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname" optional="true" />-->
          <!--<claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier" optional="true" />-->
          <!--<claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier" optional="true" />-->
          <!--<claimType type="http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationinstant" optional="true" />-->
          <!--<claimType type="http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod" optional="true" />-->
          <!--<claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/denyonlysid" optional="true" />-->
          <!--<claimType type="http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlyprimarysid" optional="true" />-->
          <!--<claimType type="http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlyprimarygroupsid" optional="true" />-->
          <!--<claimType type="http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid" optional="true" />-->
          <!--<claimType type="http://schemas.microsoft.com/ws/2008/06/identity/claims/primarygroupsid" optional="true" />-->
          <!--<claimType type="http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid" optional="true" />-->
          <!--<claimType type="http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname" optional="true" />-->
        </claimTypeRequired>
      </applicationService>
      <!--Commented out by Federation Utility for SharePoint 3.0-->
      <!--<serviceCertificate><certificateReference x509FindType="FindByThumbprint" findValue="DAC77B6076433468D5E1030F8B66126BF261F2BB" storeLocation="LocalMachine" storeName="My" /></serviceCertificate>-->
      <federatedAuthentication>
        <wsFederation passiveRedirectEnabled="true" issuer="https://adfs.kor.cmil.mil/adfs/ls/" realm="https://moss2007hv.kor.cmil.mil/" requireHttps="true" />
        <cookieHandler requireSsl="true" />
      </federatedAuthentication>
      <serviceCertificate>
        <certificateReference x509FindType="FindByThumbprint" findValue="DAC77B6076433468D5E1030F8B66126BF261F2BB" storeLocation="LocalMachine" storeName="My" />
      </serviceCertificate>
      <issuerNameRegistry type="Microsoft.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
        <trustedIssuers>
          <add thumbprint="FC144B44D2D81BCA7CFB933A8D818236C94E8505" name="http://adfs.kor.cmil.mil/adfs/services/trust" />
        </trustedIssuers>
      </issuerNameRegistry>
    </service>
  </microsoft.identityModel>

В приведенном выше примере ожидаются утверждения имени и роли.

Итак, затем я вернулся к своему серверу ADFS и убедился, что доверие проверяющей стороны создано правильно.

Затем вы щелкните правой кнопкой мыши доверие проверяющей стороны и измените правила утверждения. Щелкните существующее правило правой кнопкой мыши или добавьте правило, если оно не существует. В этом примере я заметил, что не установил тип исходящего утверждения для имени. Итак, я использовал атрибут LDAP: User-Principle-Name и сопоставил его с именем типа исходящего утверждения.

Для ролей я использовал Token-Groups-Unqualified Names и сопоставил это с ролью.

После того как я правильно настроил правило на моем сервере ADFS для предоставления утверждений, запрошенных в моем web.config, ошибка исчезла, и все заработало, как и ожидалось.

У меня такая же проблема. Вот еще одно подобное обсуждение в другом месте. Вы решили свою проблему?

http://social.msdn.microsoft.com/Forums/en/Geneva/thread/43392dc5-e764-4027-8de5-1638a4c17540

Комментарии Поллема внизу полезны.