Gee*_*ekn 5 authentication azure-active-directory asp.net-core
我有一个使用工作或学校帐户(Azure AD 身份验证)的 ASP.NET Core 2.2 Web 应用程序。当我退出时,应用程序结束于
/AzureAD/帐户/注销
我希望它使用应用程序注册中指定的注销 URL 重定向回主页。请参阅下面的屏幕截图。在此处指定注销 URL 时,Azure AD 实际上会调用该页面(以清除会话数据),但最终会在 /AzureAD/Account/SignedOut 位置结束。我没有看到其他任何地方可以指定等效的注销 URL。这是使用 Azure AD 身份验证时 Visual Studio 生成的注销按钮代码。
<a asp-area="AzureAD" asp-controller="Account" asp-action="SignOut">Sign out</a>
Run Code Online (Sandbox Code Playgroud)
我还尝试将重定向直接添加到操作中。
<a asp-area="AzureAD" asp-controller="Account" asp-route-post_logout_redirect_uri="https://localhost:44381" asp-action="SignOut">Sign out</a>
Run Code Online (Sandbox Code Playgroud)
Nan*_* Yu 11
一种方法是使用自定义URL 重写中间件通过检查路径来重定向,将以下代码放在之前app.UseMvc:
app.UseRewriter(
new RewriteOptions().Add(
context => { if (context.HttpContext.Request.Path == "/AzureAD/Account/SignedOut")
{ context.HttpContext.Response.Redirect("/Home/Index"); }
})
);
Run Code Online (Sandbox Code Playgroud)
小智 5
发生此问题的原因是 ASP.NET core 中嵌入的AccountController.cs返回到您提到的 URL:
[HttpGet("{scheme?}")]
public IActionResult SignOut([FromRoute] string scheme)
{
scheme = scheme ?? AzureADDefaults.AuthenticationScheme;
var options = Options.Get(scheme);
var callbackUrl = Url.Page("/Account/SignedOut", pageHandler: null, values: null, protocol: Request.Scheme);
return SignOut(
new AuthenticationProperties { RedirectUri = callbackUrl },
options.CookieSchemeName,
options.OpenIdConnectSchemeName);
}
Run Code Online (Sandbox Code Playgroud)
一种解决方法是构建您自己的 AccountController,而不是使用 ASP.NET CORE 附带的默认帐户控制器,如下所示:
public class AccountController : Controller
{
[HttpGet]
public IActionResult SignIn()
{
var redirectUrl = Url.Action(nameof(HomeController.Index), "Home");
return Challenge(
new AuthenticationProperties { RedirectUri = redirectUrl },
OpenIdConnectDefaults.AuthenticationScheme);
}
[HttpGet]
public IActionResult SignOut()
{
var callbackUrl = Url.Action(nameof(SignedOut), "Account", values: null, protocol: Request.Scheme);
return SignOut(
new AuthenticationProperties { RedirectUri = callbackUrl },
CookieAuthenticationDefaults.AuthenticationScheme,
OpenIdConnectDefaults.AuthenticationScheme);
}
[HttpGet]
public IActionResult SignedOut()
{
if (User.Identity.IsAuthenticated)
{
// Redirect to home page if the user is authenticated.
return RedirectToAction(nameof(HomeController.Index), "Home");
}
return RedirectToAction(nameof(HomeController.Index), "ThePathYouWant");
}
[HttpGet]
public IActionResult AccessDenied()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5348 次 |
| 最近记录: |