Avi*_* P. 7 openid-connect asp.net-core identityserver4 angular
我想用(Asp.Net Core)后端构建一个(Angular)SPA,我想使用安全最佳实践。我的计划是这样的:
现在这是我因缺乏正确理解而陷入困境的地方
问题 1 - 最佳实践
上述程序甚至被认为是最佳实践吗?还是我做错了?
问题 2 - 身份验证票证
我的后端只是 API,它不为用户呈现 HTML 页面,只提供 Json 响应。我应该创建什么样的身份验证票?它应该是 JWT 还是 Cookie?我认为它不能是 cookie,因为 API 无法返回浏览器将正确存储的 cookie。所以它必须是某种令牌,最好是 JWT。SPA 应该如何存储它,本地/会话存储?
问题 3 - 过期和刷新
假设后端返回一个 JWT 给 SPA,这个 JWT 应该包含什么?它的到期时间应该是多少?我应该如何处理自动刷新?
问题 4 - 所需的包和库
此外,特定于编程(因为这毕竟是一个编程问题),用于所有这些所需的库是什么。问题既针对 SPA,也针对后端。我假设我需要某种用于 SPA的openid-connect客户端,并且我需要后端的一些库来完成授权代码流(交换id_token的代码),这是由IdentityServer4? 或者有没有其他图书馆。
更新
我准备了一个解决方案,力求展示做所有事情的正确方法。这是一项正在进行的工作,凌乱且不干净,但它是最小的,它有效并且努力遵循最佳实践。
OpenID Connect是一个标准(在 OAuth 2.0 之上),它有很多流程(您提到了一个Authorization Code flow,这对于 SPA 来说不是最好的。
建议Implicit flow使用 SPA 应用程序,其中 SPA 直接从 IdP 接收令牌。隐式流现已弃用,Authorization Code with PKCE Flow是目前 SPA 的最佳选择。这篇随机博客文章将为您提供有关这些流程的更多详细信息。
SPA 还可能收到刷新令牌,该令牌可用于获取新的访问令牌,但这取决于使用的 IdP。
后端只需要库来验证令牌(来自请求Authorization标头),最终需要验证一些声明(例如角色)以进行可选授权。它不需要处理任何 OIDC 流,因为它通常通过响应代码(200、401、403、500...)与 SPA 通信,并且 SPA 处理错误。
恕我直言,只需为您的 SPA(我最喜欢的 Angular )选择合适的库(首选OIDC 认证),它将提供许多开箱即用的有用 SPA 功能(正确的流程、令牌刷新、令牌存储、用于后端调用的 http 拦截器,... )。我会避免任何 IdP 提供的库 - 它可以快速实现实施,但如果它们提供 OIDC 标准之外的某些功能,则可能会被 IdP 供应商锁定。
| 归档时间: |
|
| 查看次数: |
2234 次 |
| 最近记录: |