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を参照していて、このエラーが表示されているのかわかりませんか?
どんな援助でも乾杯
私は私のことを理解しました。しかし、それがあなたに当てはまるかどうかはわかりません。私の場合の問題は、どういうわけかミスマッチしているプロセスフローがあることです。 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.');
}
}