【问题标题】:Windows Azure Active Directory Bearer AuthenticationWindows Azure Active Directory 承载身份验证
【发布时间】:2016-12-15 19:44:08
【问题描述】:

我正在努力思考如何使用 Azure Active Directory 保护 Web API 资源。目前,我有一个 Angular 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?

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

谢谢!

【问题讨论】:

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


    【解决方案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/

    【讨论】:

      猜你喜欢
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多