使用 OAuth2 隐式流程(IdentityServer4),用户是否必须在每次访问令牌过期时重新输入密码?

Using OAuth2 Implicit Flow(IdentityServer4), do users have to re-input password every expiration of access token?

我需要为 Angular2 客户端 WebApp 实现 Authorization/Authentication 以与资源服务器 (WebApi) 通信。

我正在调查 IdentiyServer4 并选择授权类型/流程。 HERE

  1. 资源所有者密码凭据授予(我们现在使用的。)"This is so called “non-interactive” authentication and is generally not recommended"。
  2. 授权代码和混合 <- 隐式流程不允许刷新令牌的解决方案。(对我来说似乎相当复杂。但这是要走的路吗?)
  3. 隐式流程 - 推荐用于 SPA 的所有地方。但不支持刷新令牌..

使用隐式流,我如何才能不要求 SPA 的用户每隔 3600 秒输入一次密码?建议的 access_token 生命周期。我想我对获得新授权有一些不了解的地方 URL。

我看过的资源。

感谢斯科特的回答。我有一些阅读要做。

使用隐式流程时,您仍然可以使用自己的 cookie 生命周期(即超过 3600 秒)。要避免访问令牌过期,您可以利用用户仍在 IdentityServer 中进行身份验证这一事实来获取另一个访问令牌,而无需刷新令牌。

IdentityModel OpenID Connect JS Client 通过在访问令牌到期之前触发一个事件并使用 iframe 向 IdentityServer 发出新的身份验证请求来实现这一点。如果用户仍然登录到 IdentityServer(与您自己的客户端应用程序相比,它有一个不同的、通常寿命更长的 cookie),那么 IdentityServer 会像正常的身份验证请求一样发回新令牌。这发生在后台,没有用户交互,也没有中断。

查看此库中的 automaticSilentRenew 功能以了解实现细节。

顺便说一下,对于 IdentityServer,隐式、授权代码和混合授权类型是 OpenID Connect 授权类型。引用 OAuth 版本的资源可能不适用于您的用例。