art*_*zuk 2 openid asp.net-mvc openid-connect asp.net-core
我有这个控制器
[Route("Authentication")]
public class AuthenticationController : Controller
{
Run Code Online (Sandbox Code Playgroud)
而这个动作
[HttpGet("SignOut")]
public async Task<IActionResult> SignOut([FromQuery] string sid)
{
await ControllerContext.HttpContext.SignOutAsync(Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectDefaults.AuthenticationScheme);
await ControllerContext.HttpContext.SignOutAsync(Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationDefaults.AuthenticationScheme);
return View();
Run Code Online (Sandbox Code Playgroud)
这按预期工作。
但是,当我为具有相同路由的 OpenId 身份验证配置 SignedOutCallbackPath 时,它不再起作用。我的控制器的构造函数没有被调用,动作没有被点击,浏览器中的结果是一个空白页面(代码 200),带有 html/head/body,但都是空的,不匹配任何模板或视图。
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
options.Cookie.HttpOnly = true;
})
.AddOpenIdConnect(options =>
{
options.SignedOutCallbackPath = "/Authentication/SignOut";
Run Code Online (Sandbox Code Playgroud)
SignedOutCallbackPath 不应该是我自己的视图吗?
OpenID Connect 身份验证方案中的回调路径是用于 OpenID Connect 协议身份验证流程的内部路径。其中有以下三种:
CallbackPath – 身份验证提供程序在身份验证时回发的路径。SignedOutCallbackPath – 身份验证提供者在注销后回发的路径。RemoteSignOutPath – 身份验证提供程序在第三方应用程序远程注销后回发的路径。从我的解释中可以看出,这些都是身份验证提供程序使用的 URL:它们是身份验证流程的一部分,不能由您的用户直接使用。您也无需担心处理这些事情。当身份验证中间件运行时,OpenID Connect 身份验证处理程序将自动响应这些请求。
这意味着,当您将回调路径更改为作为控制器操作之一的路径的某个路径时,身份验证中间件将在您的控制器参与之前处理该请求。这是设计使然,因此您无需担心这些路由,因为它们主要是内部路由。
如果您不能或不想使用默认值,您只能选择更改这些路径。
现在,我能想到两件可能的事情,你本来打算改变的:
SignedOutRedirectUri:这是用户在注销过程完成后被重定向到的 URL。这基本上允许您将用户发送到某个视图,例如一条消息“您已成功退出”,以显示退出已完成。
您还可以将其设置为AuthenticationProperties可以传递给SignOutAsync.
CookieAuthenticationOptions.LogoutPath:这是配置为用户可以转到的实际 URL 以退出应用程序的 URL。但这并没有真正产生太大的影响。
否则,将用户发送到您的/Authentication/SignOutURL 完全取决于您。例如,您可以在布局中放置一个按钮,以便始终为用户提供注销功能。
| 归档时间: |
|
| 查看次数: |
1240 次 |
| 最近记录: |