Udostępnij za pośrednictwem


404-File or Directory Not Found występuje podczas uzyskiwania dostępu do programu Microsoft Dynamics CRM 2011 z uwierzytelnianiem opartym na oświadczeniach

Ten artykuł zawiera rozwiązanie problemu, że nie można uzyskać dostępu do Microsoft Dynamics CRM 2011 z uwierzytelnianiem opartym na oświadczeniach z powodu błędu 404 - File or Directory Not Found.

Dotyczy: Microsoft Dynamics CRM Online
Oryginalny numer KB: 2847921

Symptomy

Podczas próby uzyskania dostępu do programu Microsoft Dynamics CRM 2011 przy użyciu uwierzytelniania opartego na oświadczeniach może wystąpić komunikat o błędzie 404-File or Directory Not Found .

Następujący stos błędów można znaleźć w podglądzie zdarzeń po włączeniu dziennika śledzenia usług AD FS na serwerze usług AD FS:

Nazwa dziennika: Śledzenie/Debugowanie AD FS 2.0
Źródło: Śledzenie usług AD FS 2.0
Data: mm/dd/rrrr 00:00:00 PM
Identyfikator zdarzenia: 67
Kategoria zadania: Brak
Poziom: Błąd
Słowa kluczowe: ADFSProtocol
Użytkownik: USŁUGA SIECIOWA
Komputer: SERWER
Opis rozwiązania:
Nie można przetworzyć żądania sieci Web, ponieważ żądanie jest nieprawidłowe. Nie można pobrać komunikatu protokołu z zapytania HTTP. Podczas próby przeanalizowanie przychodzącego żądania HTTP wystąpiły następujące błędy:

Microsoft.IdentityServer.Protocols.Saml.HttpSamlMessageException: MSIS7015: To żądanie nie zawiera oczekiwanego komunikatu protokołu lub znaleziono niepoprawne parametry protokołu zgodnie z powiązaniami protokołu HTTP SAML.
w ramach Microsoft.IdentityServer.Web.HttpSamlMessageFactory.CreateMessage(HttpContext httpContext)
at Microsoft.IdentityServer.Web.FederationPassiveContext.EnsureCurrent(HttpContext context)

Przyczyna

Program IIS Applicationhost.config jest niekompletny. Może to być spowodowane uszkodzeniem lub niekompletną instalacją usług AD FS. Usunięto jedną lub wszystkie następujące ścieżki lokalizacji i ich ustawienia:

<location path="Domyślna witryna sieci Web/adfs">
<location path="Domyślna witryna sieci Web/adfs/ls">
<location path="Domyślna witryna sieci Web/adfs/ls/auth">
<location path="Domyślna witryna sieci Web/adfs/ls/auth/integrated">
<location path="Domyślna witryna sieci Web/adfs/ls/auth/sslclient">
<location path="Domyślna witryna WWW/adfs/ls/auth/basic">

Rozwiązanie

Aby rozwiązać ten problem, należy wykonać poniższe kroki:

  1. Zatrzymaj usługę IIS na serwerze AD FS

  2. Zatrzymaj usługę AD FS na serwerze AD FS

  3. Utwórz kopię pliku applicationhost.config, a następnie otwórz plik applicationhost.config znajdujący się: C:\windows\system32\inetsrv.

  4. Przejrzyj ten plik pod kątem brakujących ścieżek lokalizacji pliku. Zaktualizuj ten plik, aby uwzględnić wszystkie ścieżki lokalizacji pliku, jak pokazano poniżej.

    <location path="Default Web Site/adfs">
            <system.webServer>
                <handlers accessPolicy="Read" />
                <security>
                    <access sslFlags="Ssl, Ssl128" />
                    <authentication>
                        <windowsAuthentication enabled="false" useAppPoolCredentials="true">
                            <extendedProtection tokenChecking="Allow" />
                        </windowsAuthentication>
                        <clientCertificateMappingAuthentication enabled="false" />
                        <anonymousAuthentication enabled="true" />
                        <iisClientCertificateMappingAuthentication enabled="false" />
                        <digestAuthentication enabled="false" />
                    </authentication>
                </security>
                <directoryBrowse enabled="false" showFlags="Date, Time, Size, Extension" />
                <defaultDocument enabled="true">
                    <files>
                        <clear />
                        <add value="default.aspx" />
                    </files>
                </defaultDocument>
            </system.webServer>
        </location>
        <location path="Default Web Site/adfs/ls">
            <system.webServer>
                <handlers accessPolicy="Read, Script" />
                <security>
                    <access sslFlags="Ssl, Ssl128" />
                    <authentication>
                        <windowsAuthentication enabled="true" useAppPoolCredentials="true">
                            <extendedProtection tokenChecking="Allow" />
                        </windowsAuthentication>
                        <clientCertificateMappingAuthentication enabled="false" />
                        <anonymousAuthentication enabled="true" />
                        <iisClientCertificateMappingAuthentication enabled="false" />
                        <digestAuthentication enabled="false" />
                    </authentication>
                </security>
            </system.webServer>
        </location>
        <location path="Default Web Site/adfs/ls/auth">
            <system.webServer>
                <security>
                    <authentication>
                        <windowsAuthentication enabled="false" useAppPoolCredentials="true" />
                        <clientCertificateMappingAuthentication enabled="false" />
                        <anonymousAuthentication enabled="false" />
                        <iisClientCertificateMappingAuthentication enabled="false" />
                        <digestAuthentication enabled="false" />
                    </authentication>
                </security>
            </system.webServer>
        </location>
        <location path="Default Web Site/adfs/ls/auth/integrated">
            <system.webServer>
                <handlers accessPolicy="Read, Script" />
                <security>
                    <authentication>
                        <windowsAuthentication enabled="true" useAppPoolCredentials="true" />
                        <clientCertificateMappingAuthentication enabled="false" />
                        <anonymousAuthentication enabled="false" />
                        <iisClientCertificateMappingAuthentication enabled="false" />
                        <digestAuthentication enabled="false" />
                    </authentication>
                </security>
            </system.webServer>
        </location>
        <location path="Default Web Site/adfs/ls/auth/sslclient">
            <system.webServer>
                <handlers accessPolicy="Read, Script" />
                <security>
                    <access sslFlags="Ssl, SslNegotiateCert, SslRequireCert, Ssl128" />
                    <authentication>
                        <windowsAuthentication enabled="false" useAppPoolCredentials="true" />
                        <clientCertificateMappingAuthentication enabled="false" />
                        <anonymousAuthentication enabled="true" />
                        <iisClientCertificateMappingAuthentication enabled="false" />
                        <digestAuthentication enabled="false" />
                    </authentication>
                </security>
            </system.webServer>
        </location>
        <location path="Default Web Site/adfs/ls/auth/basic">
            <system.webServer>
                <handlers accessPolicy="Read, Script" />
                <security>
                    <authentication>
                        <windowsAuthentication enabled="false" useAppPoolCredentials="true" />
                        <clientCertificateMappingAuthentication enabled="false" />
                        <anonymousAuthentication enabled="true" />
                        <iisClientCertificateMappingAuthentication enabled="false" />
                        <digestAuthentication enabled="false" />
                    </authentication>
                </security>
            </system.webServer>
        </location>
    
  5. Uruchom usługę IIS na serwerze usług AD FS.

  6. Uruchom usługę AD FS na serwerze usług AD FS.

Więcej informacji

Aby uzyskać więcej informacji, zobacz How to Enable Debug Logging for Active Directory Federation Services 2.0 (AD FS 2.0).