6

我有一个适用于多个教育机构的 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 方身份验证提供者不可能知道我的应用程序的特定授权需求。

有什么想法或建议吗?

4

1 回答 1

8

这是否意味着我的应用程序将所有身份验证请求重定向到 IdentityServer,让 IdentityServer 处理 OpenID Connect 的来回处理,然后从 IdentityServer 接收到带有我需要的有关用户的信息的令牌?

基本上是的。但这取决于您如何设置它。如果您只有一个客户端或一个身份验证提供程序,您的页面可以调用客户端的身份验证提供程序。或者,您可以设置您的本地 IdentityServer(更可扩展的恕我直言)并将您的客户端的身份验证提供程序配置为另一个 IdP(身份提供程序)。

身份服务器如何知道用户的领域(即它知道将用户发送到哪个客户端身份验证提供程序)?

如果您选择第二个选项,那么您的应用程序将重定向到 IdentityServer,并根据家庭领域自动重定向到 IdP。如果您的应用程序未指定主域,则 IdentityServer 将显示所有已配置的 IdP,并且用户选择要在哪个 IdP 上进行身份验证。

IdentityServer 是否需要验证用户在我的应用程序的本地/本机数据库中是否存在?

这取决于你。如果您希望验证本地数据库中用户的存在,那么您可以通过扩展 IdentityServer 来实现。

IdentityServer 可以同时处理 SSO 和本地登录吗?

是的,它可以。

单独的身份服务器是否可行?似乎是这样,允许我的应用程序与一个点(身份服务器)集成。

您始终可以使用 IdentityServer 并将其集成到本地应用程序中。或者,您可以使用 Shiboleth 作为您的本地身份验证提供程序。两者都在实施 WS-Federation、WS-Trust 或 OpenId 等标准,并且都是开源的,因此您可以根据自己的喜好对其进行扩展/修改。

但是,除了如何配置之外,关于 Thinktecture 的 IdentityServer 的文档并不多。

我真的不能说有多少文档。但如果您愿意,NDC Oslo 2014 将举办为期 2 天的会前研讨会,Dominick Baier 和 Brock Allen(IdentityServer 的作者)将教您所有您想知道的内容。

于 2014-03-17T20:08:21.753 回答