繁体   English   中英

Blazor 服务器,API 与 OpenIdDict 并使用自省 - 如何处理访问令牌?

[英]Blazor Server, API with OpenIdDict and using introspection - What to do with the access token?

我有一个 API 也托管一个 OpenIdDict 令牌端点。 API 没有任何带有登录 forms 的 web 页面,而是在收到表单帖子的响应中返回访问令牌。

我以前有一个旧的 AngularJS 前端,它与 API 通信以获取令牌并将其存储在客户端上。 Angular 负责将令牌添加到服务器的每个请求中。

我现在计划使用 Blazor 服务器重建前端。 我希望新的 Blazor 服务器客户端/前端对 API 令牌端点使用自省。

我的计划是构建一个自定义登录页面,在发布后,服务器端将与 API 对话并获取访问令牌、刷新令牌等。但我不知道之后将访问令牌放在哪里,以便它被每当我使用 Authorize 属性时,都会通过自省 Blazor。 我可以只返回令牌,也许写一些 javascript 将其保存在某处并将其添加到任何后续的 http 请求中,但这不像 Blazor 服务器解决方案?

我的最新发现是令牌可以“在会话中”存储在服务器上,并在客户端上创建“会话标识符”cookie? 可能完全不在这...

当我在 Blazor 服务器中使用身份支持时,在成功登录后总是会创建一个名为“.AspNetCore.Identity.Application”的 cookie。

我一直在考虑的另一个不太理想的解决方案或解决方法是将 API 的 OpenIdDict 设置代码复制到 Blazor 服务器项目并将它们指向同一个数据库。

这里的任何帮助将不胜感激!

我的计划是构建一个自定义登录页面,在发布后,服务器端将与 API 对话并获取访问令牌、刷新令牌等。但我不知道之后将访问令牌放在哪里,以便它被每当我使用 Authorize 属性时,都会通过自省 Blazor。 我可以只返回令牌,也许写一些 javascript 将其保存在某处并将其添加到任何后续的 http 请求中,但这不像 Blazor 服务器解决方案?

您可以将访问令牌存储在本地存储中,并在您想使用它时检索其值。 是的,它是 Blazor 服务器解决方案。 这就是你应该这样做的方式。

当我在 Blazor 服务器中使用身份支持时,在成功登录后总是会创建一个名为“.AspNetCore.Identity.Application”的 cookie。

这是真实的。 这是一个声明还是你在这里问一个问题? 无论如何,我猜这个 cookie 会在它的生命周期结束时被自动删除。 但是在您的情况下,您必须手动进行; 您必须编写代码来检查访问令牌是否已过期。 如果您不这样做,当您尝试访问 Wep Api 端点时,您的应用程序将出现问题。 Blazor 中还有授权组件和对象,如果您不管理存储的访问令牌,则会错误执行,例如,嵌入在 LoginDisplay 组件中的 AuthorizeView 将显示经过身份验证的用户的名称(因为您从中提取的声明访问令牌构成 AuthenticationSateProvider 创建 AuthenticationState 对象的数据),但不检查访问令牌的有效性。 但是使用当前访问令牌访问您的 web api 将导致异常,因为访问令牌无效。

我在上面描述了一些应该用数百页的文字来解释的东西。 希望你不会很困惑。

这是您开始调查的最佳地点使用 Jwt 令牌身份验证在 Blazor 服务器应用程序中自定义 AuthenticationStateProvider

希望这可以帮助...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM