Ldap Groups作为Scopes是否适用于云代工厂uaa authorization_code授权类型?

时间:2016-06-16 04:07:56

标签: jwt spring-cloud microservices spring-cloud-netflix cloudfoundry-uaa

我试图让微服务环境正常运转。我已经设置了config-server,eureka-server,zuul-server和service。为了处理安全问题,我安装并运行了Cloud Foundry的UAA服务器。

按照有关如何设置UAA服务器的文档,我可以选择拥有Ldap Groups as Scopes,我可以看到它们是如何在UAA服务器日志中创建的,但是他们并没有这样做。进入JWT令牌。 Zuul正确代理UAA服务器,我在UAA上执行身份验证过程并在Zuul上获取JWT令牌,然后zuul将代理添加到其后面的服务,但没有登录用户的组/范围客户端配置上的openid范围。我错过了什么吗?或者这就是事情的运作方式,我必须实施一种解决方法,即从令牌中获取用户的用户名并获取每个服务的每个请求的访问权限?

这是我的uaa.yml:

spring_profiles: ldap,mysql

disableInternalUserManagement: true

zones:
  internal:
    hostnames:
      - sso.example.com

oauth:
  user:
    authorities:
      - openid
      - scim.me
      - password.write
      - scim.userids
      - uaa.user
      - approvals.me
      - oauth.approvals
  clients:
    sso:
      secret: changeme!
      authorized-grant-types: authorization_code, refresh_token
      # How do I add the user groups as scopes?
      # Is it possible with this grant type?
      scope: openid
      authorities: uaa.resource

ldap:
  profile:
    file: ldap/ldap-search-and-bind.xml
  base:
    url: ldap://ldap.example.com:389
    mailAttributeName: mail
    mailSubstitute: '{0}@example.com'
    mailSubstituteOverridesLdap: true
    userDn: 'CN=Example User,OU=Admins,DC=example,DC=com'
    password: 'changeme!'
    searchBase: 'dc=example,dc=com'
    searchFilter: 'sAMAccountName={0}'
  groups:
    file: ldap/ldap-groups-as-scopes.xml
    searchBase: 'dc=example,dc=com'
    groupRoleAttribute: cn
    searchSubtree: true
    groupSearchFilter: 'member={0}'
    maxSearchDepth: 1
    autoAdd: true
  attributeMappings:
    first_name: 'givenName'
    last_name: 'sn'

smtp:
  host: mail.example.com
  port: 25

database:
  url: jdbc:mysql://mysql.example.com/uaa
  username: uaa
  password: changeme!

jwt:
  token:
    verification-key: |
      -----BEGIN PUBLIC KEY-----
      -----END PUBLIC KEY-----
    signing-key: |
      -----BEGIN RSA PRIVATE KEY-----
      -----END RSA PRIVATE KEY-----

login:
  url: https://sso.example.com/uaa/login
  branding:
    companyName: 'Example Company'

1 个答案:

答案 0 :(得分:0)

您的问题源于未在客户端上配置的范围。只有该客户端的范围列表中的范围可以出现在用户JWT上。将范围添加到此列表将不允许用户获取他们没有的范围,也不会导致这些范围出现在客户端的客户端凭证令牌上。

如果您配置了作为作用域的组,则您的客户端需要在其允许的作用域列表中配置您希望使用的每个作用域。