认证方式

  • 目前我们支持四种认证方式,Apache DolphinScheduler自身账号密码登录,LDAP, 通过Casdoor实现的SSO登录和通过Oauth2授权登录,并且oauth2授权登录方式可以和其他认证方式同时使用。

修改认证方式

dolphinscheduler-api/src/main/resources/application.yaml

  1. security:
  2. authentication:
  3. # Authentication types (supported types: PASSWORD,LDAP,CASDOOR_SSO)
  4. type: PASSWORD
  5. # IF you set type `LDAP`, below config will be effective
  6. ldap:
  7. # ldap server config
  8. urls: ldap://ldap.forumsys.com:389/
  9. base-dn: dc=example,dc=com
  10. username: cn=read-only-admin,dc=example,dc=com
  11. password: password
  12. user:
  13. # admin userId when you use LDAP login
  14. admin: read-only-admin
  15. identity-attribute: uid
  16. email-attribute: mail
  17. # action when ldap user is not exist (supported types: CREATE,DENY)
  18. not-exist-action: CREATE
  19. ssl:
  20. enable: false
  21. # jks file absolute path && password
  22. trust-store: "/ldapkeystore.jks"
  23. trust-store-password: "password"
  24. casdoor:
  25. user:
  26. admin: ""
  27. oauth2:
  28. enable: false
  29. provider:
  30. github:
  31. authorizationUri: ""
  32. redirectUri: ""
  33. clientId: ""
  34. clientSecret: ""
  35. tokenUri: ""
  36. userInfoUri: ""
  37. callbackUrl: ""
  38. iconUri: ""
  39. provider: github
  40. google:
  41. authorizationUri: ""
  42. redirectUri: ""
  43. clientId: ""
  44. clientSecret: ""
  45. tokenUri: ""
  46. userInfoUri: ""
  47. callbackUrl: ""
  48. iconUri: ""
  49. provider: google
  50. casdoor:
  51. # Your Casdoor server url
  52. endpoint: ""
  53. client-id: ""
  54. client-secret: ""
  55. # The certificate may be multi-line, you can use `|-` for ease
  56. certificate: ""
  57. # Your organization name added in Casdoor
  58. organization-name: ""
  59. # Your application name added in Casdoor
  60. application-name: ""
  61. # Doplhinscheduler login url
  62. redirect-url: ""

具体字段解释详见:Api-server相关配置

开发者LDAP测试

我们提供了一个单元测试类,可以在不启动项目的情况下测试DolphinScheduler与LDAP的集成。

dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/security/impl/ldap/LdapServiceTest.java

使用步骤如下:

  • 修改TestPropertySource配置参数为你的LDAP信息;
  • 修改ldapLogin方法中的userId和userPwd为你的账号密码;
  • 修改ldapLogin方法中的expected email为正常登陆的返回值;
  • 执行ldapLogin方法,判断LDAP登陆结果是否为预期;

如果你要启用ssl,请修改TestPropertySource配置中ssl相关参数为:

  1. security.authentication.ldap.ssl.enable=false
  2. // absolute path
  3. security.authentication.ldap.ssl.trust-store=/ldapkeystore.jks
  4. security.authentication.ldap.ssl.trust-store-password=yourpassword

运行ldapLoginSSL方法,判断email是否为预期的返回值。

通过 Casdoor 实现 SSO 登录

Casdoor 是基于 OAuth 2.0、OIDC、SAML 和 CAS 的面向 UI 的身份访问管理(IAM)/单点登录(SSO)平台。您可以通过以下步骤通过 Casdoor 为 Dolphinscheduler 添加 SSO 功能:

步骤1. 部署 Casdoor

首先,需要部署 Casdoor。 您可以参考 Casdoor 官方文档进行安装。 成功部署后,您需要确保:

然后,您可以通过以下步骤在自己的应用程序中快速实现基于 Casdoor 的登录页面。

步骤2. 配置 Casdoor

  1. 创建或使用现有的 Casdoor 应用程序。
  2. 添加您的重定向 URL(您可以在下一节中了解更多关于如何获取重定向 URL 的详细信息) Casdoor Application Setting
  3. 添加您想要的提供程序并补充其他设置。

不出所料,您可以在应用程序设置页面上获得两个值:Client IDClient secret,如上图所示。我们将在下一步中使用它们。

打开您喜欢的浏览器并访问:http://`CASDOOR_HOSTNAME`/.well-known/openid-configuration,您将看到 Casdoor 的 OIDC 配置。

步骤3. 配置 Dolphinscheduler

dolphinscheduler-api/src/main/resources/application.yaml

  1. security:
  2. authentication:
  3. # Authentication types (supported types: PASSWORD,LDAP,CASDOOR_SSO)
  4. type: CASDOOR_SSO
  5. casdoor:
  6. # Your Casdoor server url
  7. endpoint:
  8. client-id:
  9. client-secret:
  10. # The certificate may be multi-line, you can use `|-` for ease
  11. certificate:
  12. # Your organization name added in Casdoor
  13. organization-name:
  14. # Your application name added in Casdoor
  15. application-name:
  16. # Doplhinscheduler login url
  17. redirect-url: http://localhost:5173/login

通过OAuth2授权认证登录

dolphinscheduler可以同时支持多种OAuth2的provider,只需要在配置文件中打开Oauth2的开关并进行简单的配置即可。

步骤1. 获取OAuth2客户端凭据

create-client-credentials-1

create-client-credentials-2

步骤2. 在api的配置文件中开启oauth2登录

  1. security:
  2. authentication:
  3. …… # 省略
  4. oauth2:
  5. # 将enable设置为true 开启oauth2登录模式
  6. enable: true
  7. provider:
  8. github:
  9. # 设置provider的授权地址,例如https://github.com/login/oauth/authorize
  10. authorizationUri: ""
  11. # dolphinscheduler的后端重定向接口地址,例如http://127.0.0.1:12345/dolphinscheduler/redirect/login/oauth2
  12. redirectUri: ""
  13. # oauth2的 clientId
  14. clientId: ""
  15. # oauth2的 clientSecret
  16. clientSecret: ""
  17. # 设置provider的请求token的地址
  18. tokenUri: ""
  19. # 设置provider的请求用户信息的地址
  20. userInfoUri: ""
  21. # 登录成功后的重定向地址, http://{ip}:{port}/login
  22. callbackUrl: ""
  23. # 登录页跳转按钮的图片url,不填写则会展示一个文字按钮
  24. iconUri: ""
  25. provider: github
  26. google:
  27. authorizationUri: ""
  28. redirectUri: ""
  29. clientId: ""
  30. clientSecret: ""
  31. tokenUri: ""
  32. userInfoUri: ""
  33. callbackUrl: ""
  34. iconUri: ""
  35. provider: google
  36. gitee:
  37. authorizationUri: "https://gitee.com/oauth/authorize"
  38. redirectUri: "http://127.0.0.1:12345/dolphinscheduler/redirect/login/oauth2"
  39. clientId: ""
  40. clientSecret: ""
  41. tokenUri: "https://gitee.com/oauth/token?grant_type=authorization_code"
  42. userInfoUri: "https://gitee.com/api/v5/user"
  43. callbackUrl: "http://127.0.0.1:5173/login"
  44. iconUri: ""
  45. provider: gitee

步骤3.使用oauth2登录

login-with-oauth2