我一直在构建一个剃须刀页面ASP.Net Core 3.1网站,并且有些页面的内容未经身份验证即可见,并且在对用户进行身份验证时,它会显示其他信息。
[当用户访问需要完全授权的页面时,它会立即将他们带到AzureAD登录页面,将他们登录,然后将他们重定向到他们刚刚所在的页面。
在需要授权才能查看其他详细信息的页面标题上单击登录链接时,会将其带到AzureAD登录页面,进行登录,然后将其重定向到索引页面。我希望此链接具有相同的行为,并将其重定向到刚打开的页面。
_ LoginPartial.cshtml
@if (User.Identity.IsAuthenticated)
{
<ul class="nav navbar-nav ml-auto">
<li class="navbar-text nav-item">Hello @User.FindFirst(System.Security.Claims.ClaimTypes.GivenName).Value!</li>
<li class="nav-item"><a class="nav-link" asp-area="AzureAD" asp-controller="Account" asp-action="SignOut">Sign out</a></li>
</ul>
}
else
{
<ul class="nav navbar-nav ml-auto">
<li class="nav-item"><a class="nav-link" asp-area="AzureAD" asp-controller="Account" asp-action="SignIn" >Sign in</a></li>
</ul>
}
示例
例如,如果用户通过QR码获得链接,则该链接不会自动登录。当他们单击登录链接时,它将用户重定向到索引页面。然后,用户需要返回QR码应用,然后重新扫描代码或重新单击链接以返回同一页面。
您可以自定义逻辑以在Razor页面应用程序中实现它:
在Pages文件夹中添加Account razor页面,并添加一种方法以当前页面的路径对身份验证质询进行分类:
public IActionResult OnGetSignIn(string path)
{
var redirectUrl = Url.Content("~/");
return Challenge(
new AuthenticationProperties { RedirectUri = path },
AzureADDefaults.AuthenticationScheme);
}
在_LoginPartial中,修改路径并设置路径,如:
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-route-path="@Context.Request.Path" asp-page="/Account" asp-page-handler="SignIn" >Sign in</a>
</li>
通过用户身份验证后,用户将被重定向到AuthenticationProperties中的RedirectUri配置。