使用OIDC客户端和IdentityServer4,将外部身份提供商令牌与内部身份提供商令牌交换



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

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

流量:

  1. 用户在SPA中登录Google(致电Oidcmanager.signinredirect(
  2. Google重定向回到SPA(Cal new Oidc.usermanager((。SignredirectCallback(
  3. 将JWT发送回IdentityServer4(但是要使用哪种机制?(。如果用户确实存在于内部系统中,请返回一个新的JWT,其中有我的自定义主张,即Oidcmanager可以管理(替换外部(。如果用户在内部系统中不存在,请rediRec到登录页面,其中资源所有者凭据流接管。

对于#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);
});

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

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

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

相关内容

最新更新