web-dev-qa-db-ja.com

React SPA / Embedded Identity Server issue after .net core 3 preview 8 upgrade

React SPAが最初に作成され、SPAテンプレートを使用して.NET Core 3プレビュー7で実行されています。React SPA "The client" was configured暗黙的なフローとoidc-clientを正常に使用するため。

これが私の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,
        };

しかし、今プレビュー7だったアセンブリのプレビュー8にアップグレードすると、ログに次のエラーが表示されます

[10:55:34エラー]クライアントの無効な付与タイプ: "authorization_code"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:" authorization_code "、RequestedScopes:" "、State:" a1e84334a8c94b7db599ddb9336447c8 "、UiLocales:null、Nonce:null、AuthenticationContextReferenceClasses:null、DisplayMode:null、PromptMode:null、MaxAge:null、LoginHint:null、SessionId: null、Raw:[( "client_id": "projectName.web")、( "redirect_uri": " https:// localhost:44343/authentication/login-callback ")、( "response_type" : "code")、( "scope": "projectName.webAPI openid profile")、( "state": "a1e84334a8c94b7db599ddb9336447c8")、( "code_challenge": "E8p1sg 1Y0TdbhxccGB-_fbx7D6GnJXfCpcYu1IHZC_k ")、(" code_challenge_method ":" S256 ")、(" Prompt ":" none ")]}(IdentityServer4.Validation.AuthorizeRequestValidator)[10:55.Endpointity Errors。 AuthorizeEndpoint)

なぜそれがauthorization_codeを参照していて、このエラーが表示されているのかわかりませんか?

どんな援助でも乾杯

12
Andrew Duffy

私は私のことを理解しました。しかし、それがあなたに当てはまるかどうかはわかりません。私の場合の問題は、どういうわけかミスマッチしているプロセスフローがあることです。 React Authサンプルを使用してEF Coreを使用するように変更しようとすると、AuthorizeService.js/completeSignIn()でupdateState呼び出しが行われません。コードにより、トークンエンドポイントへの別の呼び出しが発生するようですSignState()に戻る前に、状態を保存するupdateState()呼び出しはありません。また、最初の呼び出し後にコードの有効期限が切れたため、2番目の呼び出しは失敗しています。どういうわけか、React Reduxサンプルを使用し、completeSignIn()に必要なupdateState()呼び出しが含まれています。また、非常に異なるAuthorizeService.jsファイルを除いて、他の認証/承認関連コードはReactおよびReduxサンプルを使用したReact。これは新しい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