因此,我正在尝试使用客户端blazor,并尝试确定JWT或Cookie身份验证的正确实现。 假设我有一个在客户端提供令牌和刷新令牌的服务,我将有多个API服务,需要使用此令牌或cookie来创建API请求。
据我所知,我将需要实现https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/implement-resilient-applications/use-httpclientfactory-to-implement-resilient-http-requests中类似的实现和API Service类
因此,为了具有一致的身份验证状态,应引入身份验证服务并将其注入API Service类。该服务将负责进行身份验证,获取初始令牌并在需要时执行刷新令牌。
因此,在Blazor的最新版本中,有一个名为AuthenticationStateProvider的新组件,使用起来似乎很清楚,但问题是将其用作全局身份验证服务是否正确?
答案 0 :(得分:1)
因此客户端不支持HttpClientFactory。在客户端Blazor中,HttpClient被添加到DI系统中,您可以将其注入到组件或类中。
因此,您想将AuthenticationStateProvider用作全局身份验证服务吗?我不熟悉此组件,但是从阅读您的问题后的简短阅读中,我担心它不是身份验证系统,而是提供身份验证状态信息(例如用户年龄等)的工具。您仍然需要配置Jwt中间件,创建负责发行Jwt令牌的控制器,等等。而且我猜想您可以使用AuthenticationStateProvider在用户(例如,登录之前和之后等)之前为客户端应用提供身份验证状态。我希望我对此没有错,至少不是完全错误。
所以希望这对您有帮助...
答案 1 :(得分:1)
当在不安全的客户端(例如SPA)上使用JWT时,实现刷新令牌是一种不好的做法,因为这些令牌本来就是私有的。
OIDC当前的建议(针对SPA)是实施身份验证代码授予策略。
我建议您看看Blazor-Auth0库(在此处为作者),它实现了Auth0上涂黑的身份验证代码授予策略,因此您无需重新发明轮子(它是免费的)。>
即使您不想添加新的依赖关系,也可以将其作为如何在Blazor中实现JWT身份验证和授权的示例的好来源。