web-dev-qa-db-fra.com

React Problème de SPA / Embedded Identity Server après la mise à niveau de .net core 3 preview 8

Nous avons un React SPA qui a été initialement créé en utilisant les modèles SPA et fonctionnant sur .NET Core 3 preview 7. Le React SPA "Le client" a été configuré pour le flux implicite et l'utilisation réussie du client oidc.

Voici la configuration client dans mon startup.cs:

        var mySPAClient = new IdentityServer4.Models.Client()
        {
            AccessTokenLifetime = accessTokenLifetime,
            RedirectUris =
                {
                    $"{Host}/authentication/login-callback",
                    $"{Host}/silent-refresh.html"
                },
            PostLogoutRedirectUris =
                {
                    $"{Host}/authentication/logout-callback"
                },
            ClientId = "projectName.web",
            AllowedScopes =
                {
                    "projectName.webAPI",
                    "openid",
                    "profile"
                },
            ClientName = "projectName.web",
            RequireConsent = false,
            AllowedGrantTypes =
                {
                    IdentityModel.OidcConstants.GrantTypes.Implicit
                },
            AllowAccessTokensViaBrowser = true,
        };

Mais maintenant, lorsque je passe à l'aperçu 8 pour tout assemblage qui était l'aperçu 7, j'obtiens l'erreur suivante dans les journaux

[10:55:34 Erreur] Type d'autorisation non valide pour le client: "code_autorisation" AuthorizeRequestValidationLog {ClientId: "projectName.web", ClientName : "projectName.web", RedirectUri: " https: // localhost: 44343/authentication/login-callback ", AllowedRedirectUris: [" https: // localhost: 44343/authentication/login-callback "," https: // localhost: 44343/silent-refresh.html "], SubjectId:" anonymous ", ResponseType:" code ", ResponseMode:" query ", GrantType: "autorisation_code", RequestedScopes: "", état: "a1e84334a8c94b7db599ddb9336447c8", UiLocales: null, Nonce: null, AuthenticationContextReferenceClasses: null, DisplayMode: null, PromHode: null, MaxAge: null, SessionHd : [("client_id": "projectName.web"), ("redirect_uri": " https: // localhost: 44343/authentication/login-callback "), ("" response_type ":" code "), (" scope ":" projectName.webAPI openid profile "), (" state ":" a1e84334a8c94b7db599ddb9336447c8 "), (" code_challenge ":" E8p1sg1Y0 TIDBHXCCGB-_fbx7D6GnJXfCpcYu1IHZC_k "), (" code_challenge_method ":" S256 "), (" Invite ":" aucun ")]} (IdentityServer4.Validation.AuthorizeRequestValidator) [Validation des erreurs d'identité. AuthorizeEndpoint)

Je ne sais pas pourquoi il fait maintenant référence au code d'autorisation et cette erreur apparaît?

Bravo pour toute aide

12
Andrew Duffy

J'ai compris le mien. Mais je ne sais pas si cela s'applique au vôtre. Le problème dans mon cas est que j'ai un flux de processus qui est en quelque sorte asymétrique. Lorsque j'ai essayé de modifier le React avec l'exemple Auth pour utiliser EF Core, l'appel updateState n'est pas effectué dans AuthorizeService.js/completeSignIn (). Le code semble provoquer un autre appel au point de terminaison du jeton avant qu'il ne revienne à SignIn (), sans appel updateState () pour enregistrer l'état. Et il échoue le second puisque le code a expiré après le premier appel. J'ai trouvé en quelque sorte un autre code source à partir du React avec l'exemple Redux, qui a l'appel updateState () requis dans le completeSignIn (). Et à part le fichier AuthorizeService.js très différent, les autres codes liés à l'authentification/autorisation sont les mêmes entre le React avec l'exemple Auth et le React avec l'exemple Redux. Voici le nouveau code completeSignIn:

    async completeSignIn(url) {
        await this.ensureUserManagerInitialized();
        try {
            const { state } = await this.userManager.readSigninResponseState(url, this.userManager.settings.stateStore);
            if (state.request_type === 'si:r' || !state.request_type) {
                let user = await this.userManager.signinRedirectCallback(url);
                this.updateState(user);
                return this.success(state.data.userState);
            }
            if (state.request_type === 'si:p') {
                await this.userManager.signinSilentCallback(url);
                return this.success(undefined);
            }
            if (state.request_type === 'si:s') {
              await this.userManager.signinSilentCallback(url);
              return this.success(undefined);
            }

            throw new Error(`Invalid login mode '${state.request_type}'.`);
        } catch (signInResponseError) {
            console.log('There was an error signing in', signInResponseError);
            return this.error('Sing in callback authentication error.');
        }
    }
0
laorient