我有一个适用于多个教育机构的 SaaS Web 应用程序。所有客户端都托管在同一个应用程序/数据库中。该应用程序当前是用 C# 为 ASP.Net 4 Web 窗体编写的。
目前我的应用程序使用本地/本机数据库进行用户身份验证/授权。
我们的客户要求我们支持单点登录,其中客户端是身份验证提供者,我的应用程序是消费者。
问题是客户端通过不同的协议/机制(如 Shibboleth 和 OpenID Connect)请求 SSO。这意味着我需要/应该创建一个适用于所有这些或至少是可扩展的解决方案。
我遇到了 Thinktecture 的 IdentityServer,我认为它可以抽象出我的客户使用的各种 SSO 机制,并将我的应用程序理解的基于声明的身份令牌返回给我的应用程序。
不过,我在这个概念上挣扎了很多。这是否意味着我的应用程序将所有身份验证请求重定向到 IdentityServer,让 IdentityServer 处理 OpenID Connect 的来回处理,然后从 IdentityServer 接收到带有我需要的有关用户的信息的令牌?身份服务器如何知道用户的领域(即它知道将用户发送到哪个客户端身份验证提供程序)?IdentityServer 是否需要验证用户在我的应用程序的本地/本机数据库中是否存在?IdentityServer 可以同时处理 SSO 和本地登录吗?
单独的身份服务器是否可行?似乎是这样,允许我的应用程序与一个点(身份服务器)集成。但是,除了如何配置之外,关于 Thinktecture 的 IdentityServer 的文档并不多。ADFS 可能会提供类似的解决方案,但大多数示例都是针对 ADFS 和 Azure。
最后,我假设我仍然会维护每个用户的本地/本地授权数据,因为第 3 方身份验证提供者不可能知道我的应用程序的特定授权需求。
有什么想法或建议吗?