外部登录回调不会重定向到授权端点

问题描述 投票:0回答:1

我的外部登录回调处理程序将成功设置 aspnet cookie,但不会重定向到授权端点以继续 OpenIddict 中的 OIDC 流程。例如,这个:

app.MapMethods("callback/login/github", new[] { HttpMethods.Get, HttpMethods.Post }, async (HttpContext context) =>
{
    var result = await context.AuthenticateAsync(OpenIddictClientAspNetCoreDefaults.AuthenticationScheme);

    var identity = new ClaimsIdentity(authenticationType: "ExternalLogin");
    identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, result.Principal!.FindFirst("id")!.Value));

    var properties = new AuthenticationProperties
    {
        RedirectUri = result.Properties!.RedirectUri
    };

    // properties.RedirectUri ignored!!!
    return Results.SignIn(new ClaimsPrincipal(identity), properties);
});

...向指定的重定向 URL 返回 200 OK 结果而不是 302,完全忽略传递给

Results.SignIn

的属性
asp.net-core openiddict
1个回答
0
投票

问题是我的项目面向 .Net 6.x,但 7.x 中修复了一个错误,该错误允许 ASP.NET cookie 身份验证处理程序使用

AuthenticationProperties
中指定的重定向 URL。

这需要一段时间才能弄清楚,因为 OpenIddict 示例存储库的目标是 8.0,因此在此发布我自己的问题+答案,以帮助其他可能仍以 .Net 6.0 为目标的人。

解决方案是目标 7.x(或更高版本)或手动返回重定向结果,例如

    await context.SignInAsync(new ClaimsPrincipal(identity), properties);
    return Results.Redirect(properties.RedirectUri ?? "/");
© www.soinside.com 2019 - 2024. All rights reserved.