asp.net-core - Blazor 服务器、带有 OpenIdDict 的 API 和使用自省 - 如何处理访问令牌?
问题描述
我有一个 API,它也托管一个 OpenIdDict 令牌端点。API 没有任何带有登录表单的网页,而是在响应中返回访问令牌作为接收表单帖子的结果。
我以前有一个旧的 AngularJS 前端,它与 API 对话以获取令牌并将其存储在客户端上。Angular 负责将令牌添加到服务器的每个请求中。
我现在正计划使用 Blazor Server 重建前端。我希望新的 Blazor Server 客户端/前端对 API 令牌端点使用自省。
我的计划是构建一个自定义登录页面,该页面将在服务器端与 API 对话并获取访问令牌、刷新令牌等。但我不知道之后将访问令牌放在哪里以便它使用每当我使用 Authorize 属性时,都会通过自省 Blazor。我可以只返回令牌并编写一些 javascript 将其保存在某处并将其添加到任何后续 http 请求中,但这不像 Blazor Server 解决方案?
我的最新发现是令牌可以“在会话中”存储在服务器上,并在客户端上创建“会话标识符”cookie?可能完全不在这...
当我在 Blazor Server 中使用身份支持时,总是在成功登录后创建一个名为“.AspNetCore.Identity.Application”的 cookie。
我一直在考虑的另一个不太理想的解决方案或解决方法是将 API 的 OpenIdDict-setup 代码复制到 Blazor Server 项目并将它们指向同一个数据库。
这里的任何帮助将不胜感激!
解决方案
我的计划是构建一个自定义登录页面,该页面将在服务器端与 API 对话并获取访问令牌、刷新令牌等。但我不知道之后将访问令牌放在哪里以便它被使用每当我使用 Authorize 属性时,都会通过自省 Blazor。我可以只返回令牌并编写一些 javascript 将其保存在某处并将其添加到任何后续的 http 请求中,但这不像 Blazor Server 解决方案?
您可以将访问令牌存储在本地存储中,并在需要时检索其值。是的,它是 Blazor Server 解决方案。这就是你应该这样做的方式。
当我在 Blazor Server 中使用身份支持时,总是在成功登录后创建一个名为“.AspNetCore.Identity.Application”的 cookie。
这是真实的。这是一个声明还是你在这里问一个问题?无论如何,我猜这个 cookie 会在它的生命周期结束时被自动删除。但是在您的情况下,您必须手动进行;您必须编写代码来检查访问令牌是否已过期。如果您不这样做,您的应用程序将在您尝试访问 Wep Api 端点时出现问题。如果您不管理存储的访问令牌,Blazor 中的授权组件和对象也会错误执行,例如,嵌入在 LoginDisplay 组件中的 AuthorizeView 将显示经过身份验证的用户的名称(因为您从中提取的声明访问令牌构成 AuthenticationSateProvider 创建 AuthenticationState 对象的数据),但不检查访问令牌的有效性。
我在上面描述了一些应该用数百页的文字来解释的东西。希望你不会很困惑。
这是您开始调查的最佳地点使用 Jwt 令牌身份验证自定义 Blazor 服务器应用程序中的 AuthenticationStateProvider
希望这可以帮助...
推荐阅读
- javascript - 如何让异步函数在解析之前等待数据库查询完成?
- java - 在 cmake 中将编译错误打印到标准输出
- python - 如何将背景渐变颜色映射“RdYlGn”应用于某些表行,并将“RdYlGn_r”反向应用于同一表中的其他行?
- filesystems - 返回当前草图的文件名
- python - 如何为 pip 修复“ImportError: cannot import name 'FormatControl'”?
- django-rest-framework - DRF,读的使用方法,写的字段
- python - Python namedtuple 使用__slots__ 来实现?
- c - 如何将预定义数据添加到嵌套结构中
- ios - 当 UIImageView 有图像时,UICollectionView 自定义单元格 UILabel 丢失
- html - Div 对结果没有影响,不读取边框和其他类似属性,无法发布,注释掉时对包含的元素有影响