Пользователь не прошел проверку подлинности по истечении IdentityTokenLifetime

Как правильно обновить IdentityToken. Мы используем неявный поток.

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
    {
        ClientId = ConfigurationManager.AppSettings["IdSrv.ClientId"],
        Authority = ConfigurationManager.AppSettings["IdSrv.Authority"],

        AuthenticationType = "MySTS",

        ResponseType = "id_token token",                  //Implicit Flow 

        Scope = "openid name email",

        RedirectUri = ConfigurationManager.AppSettings["IdSrv.RedirectUri"],
        PostLogoutRedirectUri = ConfigurationManager.AppSettings["IdSrv.PostLogoutRedirectUri"],

        SignInAsAuthenticationType = "OAuth Bearer",
    });

IdentityTokenLifetime по умолчанию равен 300 (=5 минут). Когда это время истекает, пользователь больше не проходит аутентификацию. Должны ли мы вернуть статус 401 (и передать prompt=none), поэтому промежуточное ПО перенаправляет на IdentityServer3 и обратно? Есть ли другой способ?

2 ответа

По умолчанию промежуточное ПО ASP.NET OIDC OWIN использует время жизни идентификатора в качестве времени жизни файла cookie, которое будет выдано вашим приложением. Похоже, это зависание от промежуточного программного обеспечения WS-Federation OWIN, где входящий токен гораздо дольше. Так как идентификационные токены недолговечны и обычно просто используются один раз, а затем отбрасываются, это поведение на самом деле не работает для OpenID Connect.

Итак, у вас есть два варианта:

  1. Установите время жизни маркера идентификации для этого клиента в IdentityServer намного выше (используя IdentityTokenLifetime собственность на Client юридическое лицо).
  2. Запретите промежуточному программному обеспечению OIDC использовать время жизни идентификатора в качестве времени жизни файла cookie. Это позволит вашему промежуточному программному обеспечению cookie контролировать время жизни сеанса.

Вы можете сделать это, установив UseTokenLifetime ложно:

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions {
    // rest of your settings
    UseTokenLifetime = false
}

Теоретически:

  1. Вы можете увеличить ttl cookie, когда пользователь входит в систему с помощью openId, и аутентифицировать пользователя с помощью этого cookie. Если срок действия файла cookie истекает, вы можете вернуть 401 или сделать перенаправление, чтобы войти снова.
  2. Сервер идентификации должен предоставлять токен обновления (через API), который используется для получения другого токена доступа, если вам нужно.
  3. Другая мысль: обычно токен доступа предоставляется только в течение ограниченного периода времени из соображений безопасности
Другие вопросы по тегам