2

问题

我希望能够在AzureAD 登录的默认质询请求上设置属性( IsPersistentExpiresUtc )。我没有看到如何执行此操作,以便创建的用户 cookie 持续时间比浏览器会话长(关闭然后重新打开浏览器)。

现在,我可以为挑战设置这些属性的唯一方法是让用户通过将其发送到以下操作来手动登录。

[HttpGet]
public IActionResult SignIn()
{
    return Challenge(
        new AuthenticationProperties { RedirectUri = "/", IsPersistent = true, ExpiresUtc = DateTime.UtcNow.AddDays(10) },
            OpenIdConnectDefaults.AuthenticationScheme);
    }

我宁愿使用以下注册的代码强制用户在进入网站后立即进行身份验证startup.cs

services.AddMvc(options =>
{
    var policy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
    options.Filters.Add(new AuthorizeFilter(policy));
});

我用来启动项目的基本模板来自以下命令

dotnet new mvc --auth SingleOrg --client-id <Application (client) ID> --tenant-id <Directory (tenant) ID>

然后,当我运行该站点时,它将挑战第一个传入请求,并开始我的登录路径并将我返回到应用程序。这工作得很好,有一个例外。发送回客户端的 cookie 的有效期为 1969 年 12 月 31 日。

然后我使用默认SignOut链接退出应用程序,没有问题。

要登录,我可以使用默认登录链接

<a class="nav-link text-dark" 
    asp-area="AzureAD" 
    asp-controller="Account" 
    asp-action="SignIn">Sign in</a>

或者我的自定义链接指向带有上面操作代码的主控制器。

<a class="nav-link text-dark" 
    asp-area="" 
    asp-controller="Home" 
    asp-action="SignIn">Sign in</a>

如果我使用默认链接,我会一次又一次地通过身份验证过程,cookie 再次具有默认日期,但如果我单击我的自定义链接,cookie 会在未来 10 天后过期,并在浏览器会话中持续存在。我希望挑战的默认行为与我编写的挑战相同。

我已阅读各种帖子无济于事,需要一些帮助。

4

0 回答 0