JWT的Istio授权

时间:2018-10-15 03:26:11

标签: authorization jwt rbac 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"

但是,即使Authentication标头中的preferred_username声明是正确的,我仍然从服务代理获得403 Forbidden。 如果我将request.auth.claims["preferred_username"]: "user@company.com"行注释掉,则请求成功。

有人能为我指出有关基于oidc和jwt配置授权的正确方向吗?

1 个答案:

答案 0 :(得分:1)

没关系。我发现了问题。 我缺少用户:“ *”选中以允许所有用户。 所以在主题下应该说:

subjects:
  - user: "*"
    properties:
      source.principal: "*"
      request.auth.claims["preferred_username"]: "user@company.com"

可以解决此问题。