首页 > 解决方案 > Azure AD 应用授予不记名令牌,其范围来自同一租户下的不同 AD 应用

问题描述

我在同一个租户下有一个AD 应用程序(客户端 ID:xyz,范围:xyz_123)和另一个AD 应用程序(客户端 ID:abc,范围:abc_123)


假设我在服务中的 jwt 令牌验证代码类似于

.AddJwtBearer(o =>
        {
            o.Authority = Configuration["Authentication:Authority"];
            o.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
            {
                ValidAudiences = new List<string>
                {
                    xyz,
                    xyz_123
                }
            };

所以现在,当我生成一个带有 grant_type 作为客户端凭据和客户端 id:abc 和 resource_id:xyz_123的不记名令牌并点击我的服务时,身份验证成功。


这是预期的行为。为什么 AD 应用程序(客户端 ID:abc)在遇到它没有的资源/范围时授予不记名令牌(xyz_123)。同一租户下的所有 AD 应用程序实例是否都可以访问其所有范围?

标签: authenticationasp.net-coreazure-active-directoryauthorization

解决方案


是的。您必须检查令牌权限以正确保护您的 API。

过去可以在租户边界上执行此操作,但现在只能在租户内部进行:https ://joonasw.net/view/cross-tenant-token-attacks-now-harder-in-azure-ad 。

您需要检查您的应用收到的任何访问令牌是否具有至少一个有效的委派/应用权限:https ://joonasw.net/view/always-check-token-permissions-in-aad-protected-api


推荐阅读