【发布时间】:2021-10-11 22:38:23
【问题描述】:
我正在尝试在 ASP.NET Core 5 Web 应用程序中使用 AWS Cognito 实施身份验证。
我可以通过身份验证,但现在我想实现注销功能。
我可以让注销工作,因为 ASP.NET 认为我没有经过身份验证。
在我的 Startup.cs 我有:
options.SignedOutRedirectUri = Configuration["Authentication:Cognito:SignedOutRedirectUri"];
options.Events = new OpenIdConnectEvents()
{
OnRedirectToIdentityProviderForSignOut = context =>
{
var logoutUri = options.SignedOutRedirectUri;
context.Response.Redirect(logoutUri);
context.HandleResponse();
return Task.CompletedTask;
}
};
在我的 appsettings.json 中有:
"SignedOutRedirectUri": "https://mydomain.auth.us-east-2.amazoncognito.com/logout?client_id=<<clientid>>&response_type=code&redirect_uri=https://localhost:44306/Home/LoggedOut"
在我的注销控制器中,我有:
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
await HttpContext.SignOutAsync(OpenIdConnectDefaults.AuthenticationScheme);
return Redirect("/Home/LoggedOut");
所以当我点击我的注销链接时,我被重定向到 /Home/LoggedOut 并且我不再经过身份验证(在那个 User.Identity.IsAuthenticated = false 中)。
但是,当我转到任何带有 [Authorize] 的页面时,它会自动将我重新验证给我登录时使用的同一用户 - 它永远不会让我有机会以其他用户身份登录。我希望它带我进入 Cognito 登录对话框并要求我再次进行身份验证。因此,我想在 AWS Cognito 方面,似乎某些地方没有得到清除。
为什么这没有让我返回登录对话框重新进行身份验证?我认为应该使用 GET 到 AWS /logout 端点。
【问题讨论】:
标签: asp.net-core amazon-cognito