使用OWIN Active Directory承载令牌启用多个租户

Mat*_*gen 5 active-directory owin adal

我最近开始使用Azure Active Directory来针对我基于AngularJS构建的网站对用户进行身份验证。

通过在GitHub上使用博客和示例代码,我已经结合ADAL.js和Katana的Bearer Token AD集成与单租户一起使用

但是,我现在在支持多个租户方面遇到一些问题。

我已经建立了一个页面,该页面显示ADAL看到他们的用户(通过根作用域的userInfo),并调用由OWIN接管并序列化的我的服务器context.Authentication.User

在客户端,一切似乎都正常运行。我可以与任何租户登录,它为我提供了我期望的对象(具有isAuthenticated: trueusername填充的以及各种属性profile描述用户,登录名和租户的)。

这是通过在客户端忽略tenant参数来完成的adalAuthenticationServiceProvider.init如文档中所述,的。

但是,在服务器端,该UseWindowsAzureActiveDirectoryBearerAuthentication方法不喜欢没有任何价值Tenant(因为它会引发异常)。我为此尝试了一些值,包括最初注册了我的应用程序的租户,以及我最喜欢的“普通”租户,但是无论我输入的内容是什么(除非这是我要登录的租户) ,如果我的ADAL与该租户一起设置),似乎就可以跳过。

值得一提的是,实际的API调用在[Authorize]过滤器上失败并返回401,这表明我的OWIN拦截器不是问题。

我如何知道UseWindowsAzureActiveDirectoryBearerAuthentication要支持多租户身份验证?

Mat*_*gen 3

我在写问题时就想到了这一点。我认为。但我花了一整天的时间发现几乎没有关于此事的文档,所以我想无论如何我都会发布它。

我的解决方案(通过另一篇博客文章找到)是ValidateIssuer = false作为参数包含在内。这是有道理的,因为我们不再想验证给我们令牌的租户是否是我们列出的令牌。

这是我解决问题的代码。

app.UseWindowsAzureActiveDirectoryBearerAuthentication(
            new WindowsAzureActiveDirectoryBearerAuthenticationOptions
            {
                TokenValidationParameters = new TokenValidationParameters
                {
                    ValidAudience = ConfigurationManager.AppSettings["ida:Audience"],
                    ValidateIssuer = false // This line made it work
                },
                AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,
                Tenant = "common" // I don't know whether this has any impact,
                                  // but it's a required parameter regardless.
            });
Run Code Online (Sandbox Code Playgroud)

如果有任何不可预见的情况,如果其他人想纠正我,我会很高兴——当您进行身份验证时,将“验证”开关关闭有点令人畏惧。但我认为这一切都很有道理。

  • 以下是围绕该配置的评论:我们不使用默认验证(针对单个发行者值进行验证,就像我们在业务应用程序中所做的那样), // 我们注入自己的多租户验证逻辑 (2认同)