我有一个包含三个应用程序的系统架构:一个在 ASP.NET Core 中开发的 Web API、一个 Identity Server 和一个作为 UI 的 Angular 应用程序。 Identity Server 使用 ASP.NET Core Identity 和 OpenIddict 实现,支持通过 Okta 和 Azure AD 等各种提供商进行登录,并且可以无缝运行。
当前的用户登录流程很简单:
现在,客户请求添加一个名为 PingID 的新内部提供商。该提供程序是“内部”的,这意味着它无法通过互联网访问,并且我们的身份服务器无法直接访问它。客户端已经在其内部 PingID 中配置了我们的身份服务器应用程序以使用授权代码流,并且我们拥有客户端 ID、客户端密钥和令牌/用户 ID 端点。 但是,我们在完成流程方面面临挑战,因为我们的身份服务器根本无法访问内部 PingID IdP,并且出于安全原因,他们无法将其公开:
使用交互式流程(如代码流)的身份验证委托需要将用户重定向到外部身份提供商:如果最终用户(对于实际用户登录和同意部分)或授权服务器本身(对于令牌)无法访问它请求/响应部分),无论您要使用的客户端堆栈如何,它都无法工作。遗憾的是,你的方案永远不会成功。
您需要说服您的合作伙伴将其公开。它不必可直接访问:如有必要,可以在该服务器前面添加反向代理或 Web 应用程序防火墙。