我按照Polymer 2教程编写了几个带有index.html的测试应用程序,它们加载了应用程序shell组件,然后根据需要延迟加载所有子组件。
现在,在我的实际应用程序中,我有一个SPA和一个Rest后端,我需要用户首先使用外部令牌服务提供程序(TSP)登录才能访问大多数后端接口。后端知道TSP,每当需要经过身份验证的用户进行REST调用时,后端默认会将客户端重定向到TSP的登录页面(如果尚未登录)。登录页面将重定向回我的应用程序。
问题是我当前的Polymer应用程序shell已经加载了太多的东西,需要相当长的时间才能加载,以找出用户尚未登录并需要重定向到TSP。
处理此外部登录方案的一般方法是什么? 我是否应该有一个简化的起始页,除了重定向到登录页面之外别无其他?当用户从登录重定向回来时,我如何加载实际的应用程序?如何与服务工作者和那些东西聚在一起?
更新
关于环境的更多信息:
客户端:聚合物2,带有oidc-client.js(基于浏览器的JavaScript应用程序的OpenID Connect(OIDC)和OAuth2协议支持)
服务器端: ASP.NET Core 2.0,为Polymer提供静态文件,为访问数据库提供REST接口。例如,在端口5000上运行。
令牌服务提供商:我的自定义服务,基于IdentityServer4(适用于ASP.NET Core的OpenID Connect和OAuth 2.0框架)构建。例如,在端口5001上运行。
oidc-client是Polymer应用程序中可以检测用户是否已登录的组件。如果不是,它会重定向到IdentityServer以获取登录掩码,并且在成功登录后,用户将被重定向到Polymer app,然后可以加载给定用户的所有可访问内容/组件。
答案 0 :(得分:1)
经过多次测试,我认为我找到了解决方案:
这个想法只是分两个阶段加载应用程序。
第1阶段: index.html 除了外部认证的oidc-client.js以及默认聚合物中包含的元信息,favicon和主屏幕图标外,其他任何内容都不包含index.html的。也许是一个小的等待动画,但没有视觉元素,web组件的东西,没有聚合物!这应该尽可能快地加载,并且只检查身份验证状态。如果用户未经过身份验证,则会将其重定向到外部登录页面。如果它已经过身份验证,则会重定向到第2阶段。
阶段2: start.html ,以前是Polymer默认的index.html。我推出了favicon和主屏幕的东西,因为现在是第1阶段。这个文件加载了Web组件应用程序shell。如果应用程序中的REST调用导致401(未授权),则必须检查用户是否未经过身份验证,或者根本没有权限。在前一种情况下,用户被重定向到第1阶段。为此,实际应用程序还需要oidc-client.js!