authorization - 使用 JWT 进行 Istio 授权
问题描述
我正在运行 isio 1.0.2,无法根据针对 Azure AD 的 JWT 声明配置服务授权。
我已经成功配置并验证了 Azure AD oidc jwt 最终用户身份验证,它工作正常。
现在我想使用 request.auth.claims["preferred_username"] 属性配置 RBAC 授权。我创建了一个如下所示的 ServiceRoleBinding:
apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRole
metadata:
name: service-reader
namespace: default
spec:
rules:
- services: ["myservice.default.svc.cluster.local"]
methods: ["GET"]
paths: ["*/products"]
---
apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRoleBinding
metadata:
name: service-reader-binding
namespace: default
spec:
subjects:
- properties:
source.principal: "*"
request.auth.claims["preferred_username"]: "user@company.com"
roleRef:
kind: ServiceRole
name: "service-reader"
但是,我不断从服务代理收到 403 Forbidden,即使来自 Authentication 标头的 preferred_username 声明是正确的。如果我注释掉request.auth.claims["preferred_username"]: "user@company.com"
行,则请求成功。
关于基于 oidc 和 jwt 配置授权,谁能指出我正确的方向?
解决方案
没关系。我发现了问题。我缺少用户:“*”检查以允许所有用户。所以在主题下应该说:
subjects:
- user: "*"
properties:
source.principal: "*"
request.auth.claims["preferred_username"]: "user@company.com"
这解决了它。
推荐阅读
- postgresql - 嵌套循环左连接花费太多时间?
- python - 将浮点数转换为整数给出错误
- c - 在 while 内使用 OR 运算符
- c# - 如何在 Unity 中将字符串转换为 DateTime?
- fullcalendar - 如何在完整日历中标记多个日期
- nuget - 无法在 Rider 上安装 NuGet 包,可用包已过时
- c# - Xamarin & IIS LocalHost WebApi 给出错误 - System.Net.Http.HttpRequestException: '网络子系统已关闭'
- android - 从 MPL/HAGO 等主应用程序运行小应用程序
- algorithm - 求一棵树的最小重量
- javascript - Qt 资源加载空的 .js 文件