Polymer 聚合物2与外部登录

Polymer 聚合物2与外部登录,polymer,polymer-2.x,Polymer,Polymer 2.x,我遵循Polymer 2教程,创建了几个带有index.html的测试应用程序,加载应用程序外壳组件,然后根据需要惰性加载所有子组件 现在在我的实际应用程序中,我有一个SPA和一个Rest后端,我需要用户首先使用外部令牌服务提供商TSP登录,以访问大部分后端接口。后端知道TSP,并且每当进行需要经过身份验证的用户的REST调用时,如果尚未登录,则默认情况下后端会将客户端重定向到TSP的登录页面。然后,登录页面将重定向回我的应用程序 问题是,我当前的Polymer应用程序外壳已经加载了太多的内容,

我遵循Polymer 2教程,创建了几个带有index.html的测试应用程序,加载应用程序外壳组件,然后根据需要惰性加载所有子组件

现在在我的实际应用程序中,我有一个SPA和一个Rest后端,我需要用户首先使用外部令牌服务提供商TSP登录,以访问大部分后端接口。后端知道TSP,并且每当进行需要经过身份验证的用户的REST调用时,如果尚未登录,则默认情况下后端会将客户端重定向到TSP的登录页面。然后,登录页面将重定向回我的应用程序

问题是,我当前的Polymer应用程序外壳已经加载了太多的内容,需要相当长的时间才能加载,以发现用户尚未登录,需要重定向到TSP

处理此外部登录场景的一般方法是什么? 我是否应该有一个简化的起始页,它除了重定向到登录页之外什么都不做?当用户从登录重新定向回来时,我将如何加载实际的应用程序?所有这些是如何与服务人员和那些东西结合在一起的

更新

有关环境的更多信息:

客户端:Polymer 2带有oidc-Client.js OpenID连接oidc和OAuth2协议,支持基于浏览器的JavaScript应用程序

服务器端:ASP.NET Core 2.0,具有用于聚合物的静态文件和用于访问数据库的REST接口。例如,在端口5000上运行

令牌服务提供商:我的定制服务,基于IdentityServer4 OpenID Connect和用于ASP.NET核心的OAuth 2.0框架构建。例如,在端口5001上运行


oidc客户端是Polymer应用程序中可以检测用户是否登录的组件。如果没有,它将重定向到登录掩码的IdentityServer,成功登录后,用户将重定向到Polymer应用程序,该应用程序可以加载给定用户的所有可访问内容/组件。

经过几次测试,我想我找到了一个解决方案:

这个想法只是分两个阶段加载应用程序

第1阶段:index.html,除了用于外部身份验证和元信息的oidc-client.js之外,它不包含任何内容,默认的Polymer index.html中包含favicon和主屏幕图标。也许是一个小的等待动画,但没有视觉元素,网络组件的东西,没有聚合物!这应该尽快加载,并且只检查身份验证状态。如果用户未经过身份验证,它将被重定向到外部登录页面。如果它已经通过身份验证,它将被重定向到第2阶段


第2阶段:start.html,以前是Polymer default index.html。我推出了favicon和主屏幕的东西,因为这是第一阶段。此文件加载web组件应用程序外壳。如果应用程序中的REST调用导致401未经授权,则必须检查用户是否未经身份验证或根本没有权限。在前一种情况下,用户被重定向到阶段1。要使其正常工作,实际应用程序还需要oidc-client.js

您没有提供有关所使用环境的足够信息。您使用的后端语言是什么?它是一个外部登录页面还是在同一个代码库中?如果您需要这里的帮助,您需要更加具体。@user544262772是的,请参阅我的更新。我对这些技术并不熟悉,我使用php后端控制我的restful体系结构以及管理身份验证的会话。另外,我正在使用直接嵌入shell的登录页面,比如在iron pages列表中,这样我的页面就不会刷新,我的应用程序中有一个状态变量,表示用户是否登录,如果他没有登录,我只会显示登录页面,表单会发送一个https ajax来更新会话后端,主要问题是重定向到登录页面的另一个URL并返回到应用程序。这似乎是IdentityServer的一个核心概念,即您有一个中心站点,用于可能多个应用程序的单点登录。也许我可以切换到一个嵌入式登录页面,我会检查。您的意思是使用prpl模式、服务工作者等,但shell最初只显示登录屏幕?同时,其他组件在后台加载,当用户登录时,一切都在那里?很好的解决方法,但是您在哪里保存令牌?、会话、cookie或本地存储?