bounty将在5天后过期。回答此问题可获得+50的声誉奖励。Nishan Dhungana正在寻找来自声誉良好来源的答案。
我有一个应用程序,我已经使用身份服务器进行身份验证。我有一些问题。每当我试图从系统中注销系统不注销。它重定向到主页,即使我已经注销。这是我如何配置我的启动类
builder.Services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = "oidc";
})
.AddCookie(options =>
{
options.Cookie.Name = IdentityConstants.ApplicationScheme;
options.ExpireTimeSpan = TimeSpan.FromMinutes(1);
options.LogoutPath = "/Home/Logout";
})
.AddOpenIdConnect("oidc", options =>
{
options.SignInScheme = "Cookies";
options.Authority = builder.Environment.IsDevelopment() ? appSetting.Development.IdentityServerUrl : appSetting.Production.IdentityServerUrl;
options.RequireHttpsMetadata = false;
options.ClientId = "technosys-inv-ui";
options.ClientSecret = "technosys-inv-secret";
options.ResponseType = "code id_token";
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("technosys-inv-api");
options.ClaimActions.MapJsonKey("website", "website");
});
builder.Services.ConfigureApplicationCookie(options =>
{
options.Cookie.IsEssential = true;
options.Cookie.SameSite = SameSiteMode.Unspecified;
});
这是我的注销操作
[AllowAnonymous]
public async Task Logout()
{
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme, new AuthenticationProperties
{
RedirectUri = "/"
});
}
这是我在Identity Server项目中配置客户端的方式。
public static IEnumerable<Client> GetClients(IConfiguration configuration)
{
AppSettings appSettings = configuration.GetSection("AppSettings").Get<AppSettings>();
AppSetting appSetting = null;
if (appSettings.Environment == "Development")
appSetting = appSettings.Development;
else
appSetting = appSettings.Production;
return new[]
{
// client credentials flow client
new Client
{
ClientId = "technosys-inv-ui",
ClientName = "Technosys Inventory UI",
RedirectUris = { appSetting.AdminClientUrl + "signin-oidc" },
PostLogoutRedirectUris = { appSetting.AdminClientUrl },
FrontChannelLogoutUri = appSetting.AdminClientUrl + "signout-oidc",
AllowedGrantTypes = GrantTypes.Hybrid,
ClientSecrets = { new Secret("technosys-inv-secret".ToSha256()) },
AllowOfflineAccess = true,
AllowedScopes = { "technosys-inv-api", "openid","profile" },
RequireConsent = false,
}
};
}
这是我的客户端应用程序x1c 0d1x
如果我单击注销按钮,它将重定向到Identity Server页面并提示您已注销。
但是,如果我点击这里标记它重定向到客户主页,而不是它应该显示注销后的登录页面。
注意:注销本地上的工作,但不注销生产上的工作
任何帮助都将不胜感激谢谢...!!!
1条答案
按热度按时间yrefmtwq1#
我通常使用以下方法来触发注销:
另外,我建议您应该与身份验证处理程序的命名保持一致,不要将自己的字符串与默认名称混淆。
以及
不小心重命名字符串值很容易造成bug,一致性是关键。
此外,还有选项。注销路径=“/Home/Logout”;需要与您的注销页面的URL完全匹配。
我也会设置选项。Cookie。SameSite = SameSiteMode。未指定;尽可能严格。