【发布时间】:2020-04-16 13:20:37
【问题描述】:
在我的 Blazor 应用程序中,我使用身份服务器 (identityserver.io) 作为外部服务来管理授权。
登录可以正常工作,但是当我尝试注销,然后尝试登录时,我直接登录而无需询问任何用户名/密码!我搜索了一个星期以来没有找到任何解决方案!
我使用以下代码:
var props = (returnUrl is null) ? null : new AuthenticationProperties()
{
RedirectUri = returnUrl
};
await HttpContext.SignOutAsync("Cookies");
await HttpContext.SignOutAsync("oidc", props);
我也试过删除所有的cookies,但是HttpContext.Request.Cookies没有cookie!
我还检查了以下链接: https://mcguirev10.com/2018/01/26/signoutasync-and-identity-server-cookies.html 但我没有看到任何帮助!
仅供参考,这是我的设置方式:
private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration)
{
context.Services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies", options =>
{
options.ExpireTimeSpan = TimeSpan.FromDays(365);
//options.Cookie.Name = ".MyApp";
})
.AddOpenIdConnect("oidc", options =>
{
options.Authority = configuration["AuthServer:Authority"];
options.RequireHttpsMetadata = true;
options.ResponseType = OpenIdConnectResponseType.CodeIdToken;
options.ClientId = configuration["AuthServer:ClientId"];
options.ClientSecret = configuration["AuthServer:ClientSecret"];
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("role");
options.Scope.Add("email");
options.Scope.Add("phone");
options.Scope.Add("MyApp");
options.ClaimActions.MapAbpClaimTypes();
});
}
【问题讨论】:
-
您没有提到您使用的是 Blazor 客户端还是服务器端,但我最近写了这篇关于 Blazor 的服务器端 OIDC 的文章:mcguirev10.com/2019/12/15/…(以及之后的几篇相关文章那个)。
-
感谢@McGuireV10,您的示例帮助很大,我正在努力解决这个问题。但是我注意到在您的示例中,当我们注销时,我们不会重定向到所需的页面,而是留在身份服务器上。例如,如果我希望重定向到“index.html”页面,我该怎么做?谢谢
标签: c# .net-core asp.net-identity asp.net-core-webapi identityserver4