是否可以进行SPA身份验证而无需重定向到外部登录页面

时间:2017-08-22 12:16:56

标签: authentication single-page-application identityserver3 openid-connect identityserver4

我目前正在开发一个连接到一堆webAPI的SPA应用程序。这些API要求用户登录,因此我开始深入研究Openid Conect和OAuth2示例,主要使用IdentityServer。

出于SPA原因,它们都需要使用隐式授权来检索access_tokens。处理令牌刷新使用隐藏的iframe连接到身份验证服务器。

我从这种方法中理解o更新access_token是在会话中维护身份验证服务。隐藏的iframe进入身份验证服务器,会话仍处于活动状态,提供了新的access_token。

所有这些对我来说都很好,除了(对于UX reasosn)我的用户需要被重定向到身份验证服务器页面以提供凭据。

是不是可以让我的SPA应用程序向身份验证服务器发送凭据,获取access_token,然后使用隐藏的iframe进行刷新以进行静默续订(我们显然不希望用户每次都通知凭据15分钟或每小时..)。

如果出于安全原因这是不可接受的,您能解释一下原因吗?

2 个答案:

答案 0 :(得分:0)

从技术上讲,可以使用“ resource owner password flow”,但是在这种情况下,模型身份提供者不能信任您的应用程序,也不会为您的用户创建会话(稍后使用静默更新)。因此,这种非交互式方法并不是真正的SSO。
对于{Web应用程序,例如Angular SPA,建议在2019年使用的是带有PKCE扩展名的代码流,如herethere所述。

答案 1 :(得分:-1)

这正是oidc-client-js库所做的。查看其Wiki页面中的automaticSilentRenew设置。可以理解,只有在身份验证服务器上的会话仍处于活动状态时,这才有效。