.net - Windows Azure Active Directory 承载身份验证

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

我正在尝试思考如何使用 Azure Active Directory 保护 Web API 资源。目前,我有一个 Angular 2 应用程序,它将用户重定向到 Azure AD 登录页面,并接收 id_token 作为返回。该 id token 在后续调用中用作不记名 token ,并且似乎有效。我的问题就在这里。

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

这似乎是我们验证不记名 token 的地方。我真正不明白的是它是如何工作的。每次 API 调用时它都会与 Azure AD 进行通信吗?如果是这样,这是理想的方法(就性能而言)吗?如果不是,这如何阻止某人创建自己的 token 并侵入 API?

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

谢谢!

最佳答案

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

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

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

查看此MSDN article了解 token 验证的更多选项。

另请参阅下面一篇有关 token 验证的精彩文章:

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

关于.net - Windows Azure Active Directory 承载身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38856204/

相关文章:

c# - 刷新 token 在访问 token 后立即过期

c# - 具有通用属性的类必须是通用的?

.net - Start-Process/System.Diagnostics.Process ExitCode 是 $null with -NoNewWindow

powershell - 如何使用 CMD 从服务器本身查找计算机对象 OU

Spring 安全 : JWT token for API and session for web

reactjs - 更新存储在 jwt 负载中的字段

c# - WorkingThread 未启动

.net - Azure 中的 WCF 服务,通过 SSL 提供 ClaimsIdentity

active-directory - CAS AD LDAP 32 错误

java - Jetty - JAAS 和 Active Directory - 仅身份验证?