authentication - 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 应用程序实例是否都可以访问其所有范围?
解决方案
是的。您必须检查令牌权限以正确保护您的 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
推荐阅读
- amazon-web-services - 有没有办法让 chrome 驱动程序在 AWS lambda 上工作?
- reactjs - NextJs + GrapghQL + Firebase 实时数据库:无法再次重新初始化 firebase 以使用实时数据库
- backup - 使用 tar 备份而不删除具有相同时间戳的文件
- clickhouse - 为什么字段类型不一样,clickhouse查询结果不一样
- asp.net-mvc - 如何使用方法调用设置超链接以在控制器中发布而不是视图中的主链接?(ASP-NET.MVC)
- android - 旋转动画在 Jetpack Compose 中不起作用
- javascript - 具有指数时间复杂度 O(c^n) 的 for 循环是否可能?
- firebase - 找不到 Firestore-algolia-search 命令
- spring - 如何在使用 OAuth2 社交登录保护 REST API 的同时配置 Spring Boot 登录页面
- spring-cloud-dataflow - 通过 UI 或 Shell 检索/自定义 Spring Cloud Data Flow 注册/预先存在的应用程序