我在启动时注册我的身份验证方案
var authBuilder =
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddScheme<MyCustomHandlerOptions, MyCustomHandler>("MyCustomScheme", null)
.AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"))
.EnableTokenAcquisitionToCallDownstreamApi(initialScopes)
.AddInMemoryTokenCaches();
我的自定义身份验证处理程序还没有做太多
protected override Task HandleChallengeAsync(AuthenticationProperties properties)
{
Context.Response.Redirect("/MyLoginPage");
return Task.CompletedTask;
}
protected override Task<AuthenticateResult> HandleAuthenticateAsync()
{
return Task.FromResult(AuthenticateResult.NoResult());
}
当使用带有指定方案的 Authorize 属性时,一切正常。我只希望在这样指定方案时使用我的 Auth 处理程序。
[Authorize(AuthenticationSchemes = "MyCustomScheme")]
我创建了一个控制器动作来强制 Oidc 挑战。
[HttpGet()]
[AllowAnonymous]
public IActionResult SignInOidc([FromQuery] string redirectUri)
{
string redirect;
if (!string.IsNullOrEmpty(redirectUri) && Url.IsLocalUrl(redirectUri))
{
redirect = redirectUri;
}
else
{
redirect = Url.Content("~/")!;
}
return Challenge(
new AuthenticationProperties
{
RedirectUri = redirect
},
OpenIdConnectDefaults.AuthenticationScheme);
}
问题是,当我导航到 时Account/SignInOidc
,HandleAuthenticateAsync()
在我的自定义 AuthenticationHandler 中调用。即使我正在返回AuthenticateResult.NoResult()
,该HandleChallengeAsync()
方法仍然被调用。
这导致我的页面重定向到我的自定义登录页面,而不是重定向到 Oidc 提供程序。
当针对不同方案调用质询时,有没有办法告诉我的处理程序不要进行重定向?