我已经从 IdentityServer4.Quickstart.UI 库创建了我的身份服务器。目前使用IdentityServer4(4.1.2)版本。我还有一个 React SPA 应用程序,它使用 axa-fr/react-oidc 包来处理身份服务器和 React 应用程序的事务。
几天前,我注意到当我单击 React 应用程序中的注销按钮时,它会调用 axa-fr/react-oidc 库的注销功能。它确实向我显示了一个声称我已成功注销的页面。但是当我再次调用react app的主页时,我是在没有身份验证的情况下登录的......
我的身份服务器配置如下;
new()
{
ClientId = "reactapp-local",
ClientName = "App UI",
AllowedGrantTypes = {GrantType.AuthorizationCode, GrantType.ResourceOwnerPassword},
AllowedScopes = { "openid", "profile","app"},
ClientUri="http://localhost:3000",
RedirectUris={ "http://localhost:3000/authentication/callback" },
PostLogoutRedirectUris = { "http://localhost:3000/authentication/signout-callback-oidc" }, // Add this
AllowedCorsOrigins={ "http://localhost:3000" },
RequirePkce=true,
RequireClientSecret=false,
AccessTokenLifetime=2678400,
UserSsoLifetime=2678400,
ClientSecrets ={new Secret("memoli".Sha256())},
AllowOfflineAccess=true,
Description="app",
LogoUri="https://somedomain.com:5022/img/products/logo-app.png",
Properties=PropertiesService.GetAppProperties()
},
axa-fr/react-oidc 客户端配置;
const dev = {
client_id: 'reactapp-local',
redirect_uri: 'http://localhost:3000/authentication/callback',
silent_redirect_uri: 'http://localhost:3000/authentication/silent-callback',
scope: 'openid profile app',
post_logout_redirect_uri: 'http://localhost:3000/authentication/signout-callback-oidc', // Ensure this matches IdentityServer
authority: 'http://localhost:34801',
refresh_time_before_tokens_expiration_in_second: 40,
service_worker_relative_url: '/OidcServiceWorker.js',
service_worker_only: false,
token_renew_mode: TokenRenewMode.access_token_invalid,
demonstrating_proof_of_possession: false,
client_secret: 'safafasasf+afasfasfafasf/pe/Unols=',
};
从 Visual Studio 的输出选项卡中,我看到日志如下;
info: IdentityServer4.Hosting.IdentityServerMiddleware[0]
Invoking IdentityServer endpoint: IdentityServer4.Endpoints.EndSessionCallbackEndpoint for /connect/endsession/callback
info: IdentityServer4.Endpoints.EndSessionCallbackEndpoint[0]
Successful signout callback.
我做了广泛的研究,但无法找到导致此问题的原因:/ 任何帮助将不胜感激。
我正在为将来面临同样问题的人回答我自己的问题。它与 IdentityServer4 配置或 axa-fr/react-oidc 库无关。
以错误的顺序调用 app.UseIdentityServer() 导致的错误。我不知道为什么会发生这种情况,但如果你在 app.UseIdentityServer() 之前调用任何东西,它会导致这种奇怪的问题。
var app = builder.Build();
app.UseIdentityServer(); ->Call this first.
app.UseStaticFiles();