我正在尝试使用cookie authentication without ASP.NET Core Identity构建Blazor服务器端应用程序。我确实设法获得了上述示例下面的身份验证。在我的应用程序中,我跳过了services.AddIdentity
,并且应用程序运行至今没有任何问题,我能够登录,注销,确定用户角色和其他角色。
我不太确定我理解的是RevalidatingServerAuthenticationStateProvider
类及其服务services.AddScoped<AuthenticationStateProvider, RevalidatingIdentityAuthenticationStateProvider<AppUser>>();
Blazor应用程序需要此服务才能继续与客户端通信,还是仅仅是安全屏障?只要Cookie没有过期,我可以让客户端保持登录状态。如果我需要RevalidatingServerAuthenticationStateProvider
服务,如何通过传递的AuthenticationState
确认用户有效? (查看索赔或其他内容)。
最初,创建RevalidatingServerAuthenticationStateProvider的目的是解决Windows身份验证的问题,该问题在单电路连接的生命周期内导致无效的用户,或者甚至是另一个用户。 RevalidatingServerAuthenticationStateProvider的作用是从主机环境中检索身份验证状态,并定期进行验证。
通常,ServerAuthenticationStateProvider是默认的身份验证状态提供程序,由框架自动添加。但是,据我所记得,Steve Anderson在github问题中建议将RevalidatingServerAuthenticationStateProvider与其他身份验证方法一起使用。不确定目前是否已完成,但是我想如果您不使用Windows身份验证,则可以坚持使用ServerAuthenticationStateProvider。如果使用Blazor WebAssembly,则应手动实现AuthenticationStateProvider提供程序。
如何通过传递的AuthenticationState确认用户是否有效
如果您的身份验证机制不是Windows身份验证,并且声明主体对象确实存在(您可以将身份验证状态提供者注入到您的组件中,检索身份验证状态对象,获取ClaimsPrincipal对象,并验证用户是否已通过身份验证。足够),那么您的用户肯定是有效的。同样,问题出在Windows身份验证上。