0

在使用 IdentityServer4 和 OIDC-Client 的 SPA 环境中,与多个外部提供商一起执行以下操作的最安全方法是什么?

本质上,如果用户使用 Google 登录,我需要登录我的内部系统并创建新的声明。这必须在服务器端后第三方回调中完成。在 SPA 中执行此操作的 IdentityServer4 中最安全的配置是什么?

流动:

  1. 用户在 SPA 中登录 Google(调用 oidcManager.signinRedirect)
  2. Google 重定向回 SPA(cal new Oidc.UserManager().signinRedirectCallback)
  3. 将 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);
});

除了登录流程之外,使用多个外部提供商进行令牌刷新的最安全方法是什么。我假设我需要定期刷新外部令牌,以防我自己的内部令牌过期。

4

1 回答 1

0

我们有一个类似的项目,我们的用户可以通过 Google 和 Facebook 登录。access_token我们通过 IdentityServer 添加了 Google 和 Facebook登录,并将客户端应用程序发送到资源服务器 (API)的 ID 和电子邮件地址存储在其中,因此资源服务器知道哪个用户登录了。

因此,我建议使用 IdentityServer4 中内置的 Google SignIn,并将详细信息发送到您的资源服务器 (API)。

于 2017-04-25T07:28:54.570 回答