在使用 IdentityServer4 和 OIDC-Client 的 SPA 环境中,与多个外部提供商一起执行以下操作的最安全方法是什么?
本质上,如果用户使用 Google 登录,我需要登录我的内部系统并创建新的声明。这必须在服务器端后第三方回调中完成。在 SPA 中执行此操作的 IdentityServer4 中最安全的配置是什么?
流动:
- 用户在 SPA 中登录 Google(调用 oidcManager.signinRedirect)
- Google 重定向回 SPA(cal new Oidc.UserManager().signinRedirectCallback)
- 将 JWT 发送回 IdentityServer4(但使用哪种机制?)。如果用户确实存在于内部系统中,则返回一个新的 JWT,其中包含 OIDCManager 可以管理的自定义声明(替换外部声明)。如果用户在内部系统中不存在,则重定向到资源所有者凭据流接管的登录页面。
对于#3,我喜欢使用 IdentityServer4 已经提供的东西,而不是滚动我自己的端点。这种情况容易支持吗?
本质上,我需要完成此操作,但不确定 IdentityServer4 将如何处理这种情况:
new Oidc.UserManager().signinRedirectCallback().then(function (externalUser) {
//TODO: pass externalUser to IdentityServer4 endpoint where it's exchanged for internal user
window.location = "../Spa/Index";
}).catch(function (e) {
console.error(e);
});
除了登录流程之外,使用多个外部提供商进行令牌刷新的最安全方法是什么。我假设我需要定期刷新外部令牌,以防我自己的内部令牌过期。