Windows Azure Active Directory承载身份验证

时间:2016-08-09 16:37:54

标签: .net active-directory jwt azure-active-directory

我正试图了解如何使用Azure Active Directory保护Web API资源。目前,我有一个角度2应用程序,将用户重定向到Azure AD登录页面,并收到一个id_token作为回报。此id令牌在后续调用中用作承载令牌,并且似乎正在工作。我的问题在这里。

    public void ConfigureAuth(IAppBuilder app)
    {
        app.UseWindowsAzureActiveDirectoryBearerAuthentication(
            new WindowsAzureActiveDirectoryBearerAuthenticationOptions
            {
                TokenValidationParameters = new TokenValidationParameters
                {
                    ValidAudience = ConfigurationManager.AppSettings["ida:ClientId"],
                    ValidateIssuer = true
                },
                Tenant = ConfigurationManager.AppSettings["ida:TenantId"]
            });
    }

这似乎是我们对承载令牌进行验证的地方。我真正不了解的是它是如何工作的。是否在每次API调用时与Azure AD进行通信?如果是这样,这是理想的方法(在性能方面)吗?如果没有,这是如何阻止某人创建自己的令牌并入侵API的?

我确信我缺少一些重要的知识,所以如果你有任何资源我应该阅读以便更好地理解这一点,请建议。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以通过TokenValidationParameters定义要验证的属性和/或您可以创建通知以实现自己的验证器。

对于上面的代码,您定义了ValidateIssuer = true - 这意味着 Issuer 将被验证 - 否则,中间件将检查 Issuer (令牌中的iss声明)与应用程序注册的租户ID匹配(例如,如果应用程序在租户contoso.com上注册,则参数验证令牌是否实际由租户contoso发布.com) - 阻止另一个租户生成的令牌。

ValidAudience = true告诉中间件验证生成的令牌是否实际生成给您的应用程序。因此,无需每次都与Azure AD进行通信。

有关令牌验证的更多选项,请参阅此MSDN article

另请参阅下面有关令牌验证的精彩帖子:

http://www.cloudidentity.com/blog/2014/03/03/principles-of-token-validation/