Ma configuration comprend 3 sites: Identity Server (Idp), Windows Authentication Host et mon site client utilisateur. Sur le site client, je demande un contrôleur décoré avec [Authorize]
et Identity Server s’active.
L'hôte Windows sur le port 44305 lève apparemment une exception et le serveur d'identité reçoit le statut 500. Je peux accéder à l'URL du site Windows hôte sans problème. Je récupère un document XML
Comment déboguer et savoir quelle est cette exception ou cette erreur qui arrête ce processus d'authentification? Je reçois une exception en 3 parties avec le plus intérieur comme suit
InvalidOperationException: IDX10803: Unable to create to obtain configuration from: 'https://localhost:44305/'.
Microsoft.IdentityModel.Protocols.ConfigurationManager`1.<GetConfigurationAsync>d__3.MoveNext() in ConfigurationManager.cs
Le démarrage de Windows Host OWIN utilise UseWindowsAuthenticationService
Identity Server OWIN utilise AuthenticationOptions = WsFederationAuthenticationOptions
var wsFederationOptions = new WsFederationAuthenticationOptions
{
AuthenticationType = "windows",
Caption = "Windows",
SignInAsAuthenticationType = signInAsType,
MetadataAddress = "https://localhost:44305/",
Wtrealm = "urn:idsrv3"
};
app.UseWsFederationAuthentication(wsFederationOptions);
}
Voici les demandes et les réponses
Request URL:https://localhost:44315/
Request Method:GET
Status Code:302 Found
Response:Location:https://localhost:16433/connect/authorize?client_id=hms2015&redirect_uri=...
Request: https://localhost:16433/connect/authorize?client_id=hms2015&redirect_uri=...
Request Method:GET
Status Code:302 Found
Location:https://localhost:16433/login?signin=fde7508a6634698847c3076c9028604b
Request URL:https://localhost:16433/login?signin=fde7508a6634698847c3076c9028604b
Request Method:GET
Status Code:500 Internal Server Error
Je n'ai aucun problème SSL visible. Avec mon navigateur, je peux ouvrir toutes les pages des différents sites sans avertissement. J'ajoute mon cert localhost IIS Express au cert. Racine approuvée.
Un autre développeur de l'équipe a aidé à trouver le problème. L’hôte d’authentification Windows fonctionnant sur le port 44305 a été désactivé de manière anonyme. Lorsque cela a été activé, le processus redirigé a recommencé à fonctionner.
Malheureusement, l'erreur n'a pas été détectée, mais elle a été corrigée par essais et erreurs (piratage). Ma question principale était de savoir comment déboguer une application OWIN afin de voir les détails du HTTP 500. J'espère que les journaux IdentityServer3 auraient pu enregistrer la réponse de l'hôte Win Auth. Aussi, pourquoi n'est-ce pas un code de réponse 401?
J'ai eu ce problème, et avait besoin de faire confiance au certificat selon Robert Muehsig répondre .
Mais cela en soi ne suffisait pas. J'utilise l'authentification de jeton de support. Un peu plus de recherches ont révélé que je devais définir le drapeau DelayLoadMetadata sur true.
Donc, au démarrage de mon API Web:
app.UseIdentityServerBearerTokenAuthentication(
new IdentityServerBearerTokenAuthenticationOptions
{
DelayLoadMetadata=true
});
Après cela et le changement de confiance du certificat, il a commencé à fonctionner. Je sais que ce n'est pas la même configuration que le problème initial, mais au cours de mes recherches, je n'arrêtais pas de lire cet article.
De ma mémoire, cette erreur est principalement due au problème de confiance du certificat/d'accès au réseau. Étant donné que vous exécutez tous les composants dans l'hôte local, il ne s'agit certainement pas d'un problème de réseau. Je suppose que vous utilisez l'environnement VS Dev.
Couple de choses:
En outre, attribuez des autorisations pour lire le certificat comme décrit ici https://github.com/IdentityServer/IdentityServer3.Samples/tree/master/source/Certificates
Si vous rencontrez toujours ce problème, essayez de surveiller le trafic via Wireshark (Fiddler ne fonctionnera pas dans ce cas).
À des fins de test, j'ai ajouté le bloc ci-dessous en tant que premier middleware de mon pipeline. Cela enregistrera l'exception à chaque fois qu'elle se produira. Cela m'a amené à voir que mon 500 était en fait un 401.
appBuilder.Use(async (context, next) =>
{
try
{
await next();
}
catch(Exception ex)
{
Log.Error(ex, "OWIN error.");
}
});
Mon équipe a rencontré les problèmes suivants: [Erreur] Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler: une exception s'est produite lors du traitement du message . System.InvalidOperationException: IDX10803: Impossible d'obtenir la configuration à partir de: ' https: // [votre domaine du serveur d'identité] /. bien connu/openid-configuration '. ---> System.IO.IOException: IDX10804: Impossible de récupérer le document à partir de: ' https: // [votre domaine du serveur d'identité]. Well-known/openid-configuration'. ---> System.Net.Http.HttpRequestException: une tentative de connexion a échoué car la partie connectée n'a pas répondu correctement après un certain temps, ou la connexion établie a échoué car l'hôte connecté n'a pas répondu ---> System.Net.Sockets .SocketException: une tentative de connexion a échoué car la partie connectée n'a pas répondu correctement après un certain délai ou la connexion établie a échoué car l'hôte connecté n'a pas répondu sur System.Net.Http.ConnectHelper.ConnectAsync (hôte de chaîne, port Int32, CancellationToken cancelToken) --- Fin de trace de pile d'exception interne ---
Nous avons passé beaucoup de temps à trouver la raison. Enfin, juste une erreur très simple, dans l’environnement UAT, la configuration du fichier hosts était incorrecte dans "C:\Windows\System32\drivers\etc". Les domaines définis dans le fichier hosts ne correspondent pas aux domaines liés dans IIS.
Cela pourrait aussi être dû à l'authentification par proxy. Essayez de vérifier le trafic du violoniste pour les appels à login.microsoftonline.com:XXX et voyez s'il renvoie 407 du code d'erreur.
Si vous voyez le code d'erreur 407, vous devez activer l'authentification du proxy dans web.config.