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: true,username填充的以及各种属性profile描述用户,登录名和租户的)。
这是通过在客户端忽略tenant参数来完成的adalAuthenticationServiceProvider.init如文档中所述,的。
但是,在服务器端,该UseWindowsAzureActiveDirectoryBearerAuthentication方法不喜欢没有任何价值Tenant(因为它会引发异常)。我为此尝试了一些值,包括最初注册了我的应用程序的租户,以及我最喜欢的“普通”租户,但是无论我输入的内容是什么(除非这是我要登录的租户) ,如果我的ADAL与该租户一起设置),似乎就可以跳过。
值得一提的是,实际的API调用在[Authorize]过滤器上失败并返回401,这表明我的OWIN拦截器不是问题。
我如何知道UseWindowsAzureActiveDirectoryBearerAuthentication要支持多租户身份验证?
我在写问题时就想到了这一点。我认为。但我花了一整天的时间发现几乎没有关于此事的文档,所以我想无论如何我都会发布它。
我的解决方案(通过另一篇博客文章找到)是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)
如果有任何不可预见的情况,如果其他人想纠正我,我会很高兴——当您进行身份验证时,将“验证”开关关闭有点令人畏惧。但我认为这一切都很有道理。
| 归档时间: |
|
| 查看次数: |
2453 次 |
| 最近记录: |