如何在多租户应用程序中通过C#以编程方式切换Azure AD目录

时间:2018-03-05 10:40:14

标签: c# asp.net-mvc azure azure-active-directory

我有ASP.NET MVC应用程序,它配置了多租户Azure AD应用程序。所以在我的Web.config我必须放<add key="ida:Authority" value="https://login.microsoftonline.com/common/" />所以这对所有人都有效。但现在我的一些应用程序用户被分配到不同的Azure目录(租户ID不同)。我需要提供像Azure Portal / Aure IoT Central中的“切换目录”功能。

我知道如果我用租户ID替换common,该应用只适用于特定的租户。

public void ConfigureAuth(IAppBuilder app)的{​​{1}}我有类似下面的内容

Startup.Auth.cs

所以这给了我一个OWIN上下文,它只有默认目录ID的详细信息。任何人都可以帮我改变这种行为吗?这样我就可以提供在目录之间切换的功能。

1 个答案:

答案 0 :(得分:0)

我做过一次(使用OWIN)的hack是在请求登录时添加一个特定的查询参数,指定了一个租户ID。

我现在无法找到源代码,但是OWIN中间件执行了以下操作:

  • 调用下一个中间件
  • 响应是否为GET,响应状态码为302,位置标头值是否为Azure AD主机,是否存在租户ID查询参数?
  • 如果是,请抓住Location标头,将值切换为"https://login.microsoftonline.com/tenant-id/oauth2/authorize?" + locationHeader query string

这是一种黑客攻击,但可以帮助用户登录到合适的租户。