我有一个 ASP.NET Core API 作为 Angular SPA 前端的后端。我使用Cognito作为身份提供者,并希望使用它创建一个 OpenId-Connect 身份验证authorization code flow
,这意味着所有秘密凭据都将存储在后端。
授权流程应该是这样的(标准 OpenID Connect 流程):
- FE 应用程序调用
/authorize
端点并被重定向到Cognito
托管 UI。 - 输入凭证后,FE 会收到一个授权码。
- FE 使用授权码调用 BE。
- BE 调用
/token
端点并接收accessToken
和refreshToken
。 - BE 返回
accessToken
FE 并设置refreshToken
为httpOnly
cookie(这个不确定,我可能会存储在 Redis 缓存中)。
然后,每个请求都会添加 FEBearer AccessToken
进行身份验证。当AccessToken
接近到期时,它将使用refreshToken
.
我正在试验这个例子,但这里的应用程序使用 Asp.Net Core cookie 进行身份验证并忽略accessToken
了refreshToken
. 即使在accessToken
过期后我也通过了身份验证。此外,没有太多关于 ASP.NET cookie 如何工作的文档。
因此,现在我正在考虑使用自定义 BE 端点并使用IdentityModel 辅助方法,但不确定处理这样的身份验证是否是一种好习惯。
/Login
- 得到AccessToken
和RefreshToken
/Refresh
-AccessToken
使用更新RefreshToken
。accessToken
临近到期时,FE 会手动调用。
那么,是否有一种“推荐”的方式来很好地处理这种情况而IdentityModel
无需编写自定义实现?
此外,据我所知,存储refreshToken
在httpOnly
cookie 中是很常见的,该 cookie 将添加到发送到 BE 的每个请求中,但是accessToken
当我已经refreshToken
添加每个请求时,我看不出有什么意义。
refreshToken
出于性能和安全原因,存储在 BE 中不是更好吗?
身份验证是每个应用程序的一部分,所以我相信也应该有一些内置的框架功能authorization code flow
。