2017-05-04 20 views
0

因此,我有一台配置为OpenID providerWAS Liberty服务器。然后我有一个使用REST Api端点的Angular应用程序。 当我第一次打开应用程序或在令牌过期后打开应用程序时,一切正常,WAS将我重定向到OpenID提供程序,然后定义由OpenID定义的流,并支持openidConnectClient-1.0实现。无法理解如何使用OpenID协议使用openidConnectClient-1.0功能和使用REST API端点的Angular应用程序

但我该如何关心以下用例:应用程序打开时令牌已过期,并且用户在不重新加载应用程序的情况下发出GET或POST请求?现在WAS也执行重定向,所以我实际上无法区分常规响应和重定向(两者均返回状态200)。

我认为唯一的解决方案是对Websphere表示不要为某些端点执行重定向,而是要返回401/403错误。所以我可以在客户端监控响应代码并执行相应的操作。是否有可能实现?也许还有另一个我不知道的解决方案?


更新:我已经写了这个之后,我想过用Authentication Filters,即定义是这样的:

<authFilter id="testFilter"> 
     <webApp id="simple" matchType="contains" name="simple"/> 
     <requestUrl id="excludeUrl1" matchType="notContain" urlPattern="/basic"/> 
     <requestUrl id="excludeUrl1" matchType="notContain" urlPattern="/api"/> 
    </authFilter> 

但我立刻看到这种方法有两个缺点:

  1. 在两个不同的地方维护应用逻辑,server.xml和应用本身。它会使应用程序的维护非常繁琐。
  2. 由于Authentication Filters的性质,它会回退到另一个registry执行登录。这可能是一个安全缺陷。

更新2:从上面解决方案不起作用。当服务器返回401错误与www-authenticate标题一起时,浏览器会显示基本身份验证弹出窗口,请参阅下面的建议解决方案。

回答

0

要解决此问题,我已使用Angular's Interceptors,我在此检查响应中是否有以下标题:no-cache, no-store, must-revalidate, private, max-age=0。如果他们坚持在响应中,我知道会话过期并执行重新加载我的应用程序。

重新加载时,Liberty本身将其重定向到SSO提供程序。另一个解决方案是从响应中提取重定向网址并手动重定向到该网址。

相关问题