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

时间:2017-04-21 19:06:48

标签: identityserver4 oidc-client-js

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

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

流速:

  1. 用户在SPA中登录Google(致电oidcManager.signinRedirect)
  2. Google重定向回SPA(新的Oidc.UserManager()。signinRedirectCallback)
  3. 将JWT发送回IdentityServer4(但要使用哪种机制?)。 如果用户确实存在于内部系统中,则返回一个新的JWT,其中包含OIDCManager可以管理的自定义声明(替换外部声明)。 如果内部系统中不存在用户,则重定向到资源所有者凭据流接管的登录页面。
  4. 对于#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);
    });
    

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

1 个答案:

答案 0 :(得分:0)

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

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

相关问题