【问题标题】:Identity Server 4 + Angular SPA as Federation Gateway for external providersIdentity Server 4 + Angular SPA 作为外部提供商的联合网关
【发布时间】:2020-05-04 16:20:18
【问题描述】:

我正在设计具有以下组件的系统: - 角SPA - .NET Core 微服务(AuthService 中的其中之一)

我想实现架构,我的 IS4 将充当联合网关(作为外部提供商的客户端 - Facebook、Microsoft、Google 等)。同时它必须充当 Angular SPA 的提供者(它将充当客户端)。

所以我想实现下一个流程。 - 用户点击社交网络登录按钮(来自 SPA) - IS4 被调用并充当外部提供的客户端 - 用户完成身份验证,IS4 收到的外部令牌 - ??? - SPA 客户端获取内部令牌

所以主要的问题是如何实现从外部提供者到内部提供者的交换令牌。 - 对于这种情况,应如何设置 SPA? - 收到外部token后,IS4和SPA如何整合? - 在这种情况下,SPA 的请求中应该包含哪些参数? - 我们可以使用 IS4 令牌端点并通过 IS4 内部进行内部令牌发行吗?

【问题讨论】:

  • 有一个关于如何将 SP4 设置为外部提供商的联合网关的教程。 identityserver4.readthedocs.io/en/latest/topics/…。您的场景是否超出了文档的范围?
  • 我研究了有关 SO 的文档、文章、问题和大量可用示例,但没有找到相关信息。给定的文章描述了这种架构的一般概念。但是我的问题的范围是正确的流程(必须如何注册 SPA)和此流程中的令牌交换(我可以自己生成令牌并在查询参数中将其返回给客户端,但不要这样这是正确和安全的方式)
  • IS4 的默认方案是返回从外部提供程序接收到的任何令牌,以供客户端(您的 SPA)使用。但是您绝对可以创建一个内部令牌并在微服务周围使用它。另一件事是您可以在 JSON 请求/响应正文而不是查询参数中传递您的令牌,并使用 HTTPS 进行连接。
  • @Ghukas 这对我来说听起来有些奇怪,因为如果我要从不同的外部提供者返回令牌,我将需要为我的微服务中的每个提供者设置验证参数(例如,如果我们这样做服务中的验证)。当出现新的提供者时,必须更新所有微服务。是不是听起来有点奇怪?我知道授权交换(但在这种情况下,应该从 SPA 调用整个外部提供程序,并且必须在我的背上交换令牌)。但这不是联邦网关方式。感谢您的关注和时间
  • (1/2) 嗯,我的想法是所有外部提供程序都添加到 IS4 中,因此,在 IS4 中进行验证。如果将来需要添加另一个外部提供程序,您需要添加服务配置并在您可以创建的ExternalProviderValidator 中完成验证。

标签: .net-core identityserver4


【解决方案1】:

所以我找到了解决我的小概念混乱的方法。

架构是: - Angular SPA - 客户端 - 具有交互的 IS4 后端 + SPA,由相同的服务(而不是快速启动 UI)提供服务 - 身份服务

接下来是流程: - 客户端启动 PKCE 流程 - 为用户显示交互 SPA(带有外部登录提供程序登录按钮、日志/传递字段等)(从身份服务加载) - 用户单击外部提供者按钮,用户和外部提供者之间开始交互 - 交互结束后,IS4 重定向到带有代码的客户端 - 客户端使用此代码请求令牌(完成 PKCE 流程)

所以主要的误解是责任。所有与授权相关的UI都必须在IS4端。

【讨论】:

    猜你喜欢
    • 2020-11-05
    • 2015-04-09
    • 2021-03-14
    • 2020-06-21
    • 1970-01-01
    • 2018-01-23
    • 2017-08-02
    • 2015-04-08
    • 2015-03-24
    相关资源
    最近更新 更多