【问题标题】:Multi-Tenant OAuth/OpenIdConnect using Web API使用 Web API 的多租户 OAuth/OpenIdConnect
【发布时间】:2014-10-14 13:44:30
【问题描述】:

我们正在开发一种 API,它使用各种方法供用户注册,即。 Facebook、Twitter、Google 以及我们自己的会员系统(使用 ASP.NET Identity 构建)。

我们有许多打算使用我们平台的大客户,并一直要求我们允许我们作为 OAuth 提供者与他们集成。这将允许他们的用户通过他们的系统进行身份验证,然后作为外部帐户链接到我们的系统。几乎使它们成为我们系统中的另一个“Facebook”类型提供商。

如果这只是一个客户,我们可以简单地使用 OpenIdConnect 并在我们的系统中进行设置。他们会为我们提供一个 client_id 和一个元数据 URL 以供我们使用,我们可以将这些用户链接回我们的系统。

我的问题是 - 我们如何为多个此类客户执行此操作,每个客户都有自己的 OpenIdConnect client_id 和元数据?我可以在我的 Web API 中使用 app.UseOpenIdConnectAuthentication 设置的多个实例吗?

我见过一些 MultiTenant Windows Azure AD 示例,它们从声明中获取tenant_id 并进行集成,但在这种情况下,我们不能真正使用 Windows Azure AD。

有人可以帮助我了解我的实施策略吗?

非常感谢任何帮助。

阿努普

【问题讨论】:

标签: asp.net-web-api oauth-2.0 asp.net-identity-2 openid-connect


【解决方案1】:

假设您的“大客户”数量有限,以下是我的建议。这些客户中的每一个都会获得自己的登录页面来登录,这在大多数情况下是有意义的,并且会在登录时使用大客户 x 按钮。

如果可行,请查看 owin-middleware github 项目,https://github.com/owin-middleware/OwinOAuthProviders

我已经能够很快地编写一个额外的 oauth 提供程序(用于 azure Active Directory 的 oauth2),而且这些大客户中的每一个都可能在他们如何实现 oauth 方面存在一些细微差别。因此,为每个客户编写一个自定义提供程序,然后您可以轻松地使用 config 来分离租户、clientid 和 secret。

【讨论】: