Taichi Masuyama 4 лет назад
Родитель
Сommit
f954030e6f

+ 215 - 203
packages/app/src/server/service/config-loader.ts

@@ -27,8 +27,8 @@ type EnumDictionary<T extends string | symbol | number, U> = {
 };
 
 const parserDictionary: EnumDictionary<ValueType, ValueParser<number | string | boolean>> = {
-  [ValueType.NUMBER]:  { parse: (v: string) => { return parseInt(v, 10) } },
-  [ValueType.STRING]:  { parse: (v: string) => { return v } },
+  [ValueType.NUMBER]: { parse: (v: string) => { return parseInt(v, 10) } },
+  [ValueType.STRING]: { parse: (v: string) => { return v } },
   [ValueType.BOOLEAN]: { parse: (v: string) => { return envUtils.toBoolean(v) } },
 };
 
@@ -47,39 +47,39 @@ const parserDictionary: EnumDictionary<ValueType, ValueParser<number | string |
  */
 const ENV_VAR_NAME_TO_CONFIG_INFO = {
   FILE_UPLOAD: {
-    ns:      'crowi',
-    key:     'app:fileUploadType',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'app:fileUploadType',
+    type: ValueType.STRING,
     default: 'aws',
   },
   FILE_UPLOAD_USES_ONLY_ENV_VAR_FOR_FILE_UPLOAD_TYPE: {
-    ns:      'crowi',
-    key:     'app:useOnlyEnvVarForFileUploadType',
-    type:    ValueType.BOOLEAN,
+    ns: 'crowi',
+    key: 'app:useOnlyEnvVarForFileUploadType',
+    type: ValueType.BOOLEAN,
     default: false,
   },
   HACKMD_URI: {
-    ns:      'crowi',
-    key:     'app:hackmdUri',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'app:hackmdUri',
+    type: ValueType.STRING,
     default: null,
   },
   HACKMD_URI_FOR_SERVER: {
-    ns:      'crowi',
-    key:     'app:hackmdUriForServer',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'app:hackmdUriForServer',
+    type: ValueType.STRING,
     default: null,
   },
   MATHJAX: {
-    ns:      'crowi',
-    key:     'app:mathJax',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'app:mathJax',
+    type: ValueType.STRING,
     default: null,
   },
   NO_CDN: {
-    ns:      'crowi',
-    key:     'app:noCdn',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'app:noCdn',
+    type: ValueType.STRING,
     default: null,
   },
   // PLANTUML_URI: {
@@ -149,372 +149,384 @@ const ENV_VAR_NAME_TO_CONFIG_INFO = {
   //   default:
   // },
   DRAWIO_URI: {
-    ns:      'crowi',
-    key:     'app:drawioUri',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'app:drawioUri',
+    type: ValueType.STRING,
     default: 'https://embed.diagrams.net/',
   },
   NCHAN_URI: {
-    ns:      'crowi',
-    key:     'app:nchanUri',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'app:nchanUri',
+    type: ValueType.STRING,
     default: null,
   },
   APP_SITE_URL: {
-    ns:      'crowi',
-    key:     'app:siteUrl',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'app:siteUrl',
+    type: ValueType.STRING,
     default: null,
   },
   PUBLISH_OPEN_API: {
-    ns:      'crowi',
-    key:     'app:publishOpenAPI',
-    type:    ValueType.BOOLEAN,
+    ns: 'crowi',
+    key: 'app:publishOpenAPI',
+    type: ValueType.BOOLEAN,
     default: false,
   },
   S2SMSG_PUBSUB_SERVER_TYPE: {
-    ns:      'crowi',
-    key:     's2sMessagingPubsub:serverType',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 's2sMessagingPubsub:serverType',
+    type: ValueType.STRING,
     default: null,
   },
   S2SMSG_PUBSUB_NCHAN_PUBLISH_PATH: {
-    ns:      'crowi',
-    key:     's2sMessagingPubsub:nchan:publishPath',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 's2sMessagingPubsub:nchan:publishPath',
+    type: ValueType.STRING,
     default: '/pubsub',
   },
   S2SMSG_PUBSUB_NCHAN_SUBSCRIBE_PATH: {
-    ns:      'crowi',
-    key:     's2sMessagingPubsub:nchan:subscribePath',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 's2sMessagingPubsub:nchan:subscribePath',
+    type: ValueType.STRING,
     default: '/pubsub',
   },
   S2SMSG_PUBSUB_NCHAN_CHANNEL_ID: {
-    ns:      'crowi',
-    key:     's2sMessagingPubsub:nchan:channelId',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 's2sMessagingPubsub:nchan:channelId',
+    type: ValueType.STRING,
     default: null,
   },
   S2CMSG_PUBSUB_CONNECTIONS_LIMIT: {
-    ns:      'crowi',
-    key:     's2cMessagingPubsub:connectionsLimit',
-    type:    ValueType.NUMBER,
+    ns: 'crowi',
+    key: 's2cMessagingPubsub:connectionsLimit',
+    type: ValueType.NUMBER,
     default: 5000,
   },
   S2CMSG_PUBSUB_CONNECTIONS_LIMIT_FOR_ADMIN: {
-    ns:      'crowi',
-    key:     's2cMessagingPubsub:connectionsLimitForAdmin',
-    type:    ValueType.NUMBER,
+    ns: 'crowi',
+    key: 's2cMessagingPubsub:connectionsLimitForAdmin',
+    type: ValueType.NUMBER,
     default: 100,
   },
   S2CMSG_PUBSUB_CONNECTIONS_LIMIT_FOR_GUEST: {
-    ns:      'crowi',
-    key:     's2cMessagingPubsub:connectionsLimitForGuest',
-    type:    ValueType.NUMBER,
+    ns: 'crowi',
+    key: 's2cMessagingPubsub:connectionsLimitForGuest',
+    type: ValueType.NUMBER,
     default: 2000,
   },
   MAX_FILE_SIZE: {
-    ns:      'crowi',
-    key:     'app:maxFileSize',
-    type:    ValueType.NUMBER,
+    ns: 'crowi',
+    key: 'app:maxFileSize',
+    type: ValueType.NUMBER,
     default: Infinity,
   },
   FILE_UPLOAD_TOTAL_LIMIT: {
-    ns:      'crowi',
-    key:     'app:fileUploadTotalLimit',
-    type:    ValueType.NUMBER,
+    ns: 'crowi',
+    key: 'app:fileUploadTotalLimit',
+    type: ValueType.NUMBER,
     default: Infinity,
   },
   FILE_UPLOAD_DISABLED: {
-    ns:      'crowi',
-    key:     'app:fileUploadDisabled',
-    type:    ValueType.BOOLEAN,
+    ns: 'crowi',
+    key: 'app:fileUploadDisabled',
+    type: ValueType.BOOLEAN,
     default: false,
   },
   FILE_UPLOAD_LOCAL_USE_INTERNAL_REDIRECT: {
-    ns:      'crowi',
-    key:     'fileUpload:local:useInternalRedirect',
-    type:    ValueType.BOOLEAN,
+    ns: 'crowi',
+    key: 'fileUpload:local:useInternalRedirect',
+    type: ValueType.BOOLEAN,
     default: false,
   },
   FILE_UPLOAD_LOCAL_INTERNAL_REDIRECT_PATH: {
-    ns:      'crowi',
-    key:     'fileUpload:local:internalRedirectPath',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'fileUpload:local:internalRedirectPath',
+    type: ValueType.STRING,
     default: '/growi-internal/',
   },
   ELASTICSEARCH_URI: {
-    ns:      'crowi',
-    key:     'app:elasticsearchUri',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'app:elasticsearchUri',
+    type: ValueType.STRING,
     default: null,
   },
   ELASTICSEARCH_REQUEST_TIMEOUT: {
-    ns:      'crowi',
-    key:     'app:elasticsearchRequestTimeout',
-    type:    ValueType.NUMBER,
+    ns: 'crowi',
+    key: 'app:elasticsearchRequestTimeout',
+    type: ValueType.NUMBER,
     default: 8000, // msec
   },
   SEARCHBOX_SSL_URL: {
-    ns:      'crowi',
-    key:     'app:searchboxSslUrl',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'app:searchboxSslUrl',
+    type: ValueType.STRING,
     default: null,
   },
   MONGO_GRIDFS_TOTAL_LIMIT: {
-    ns:      'crowi',
-    key:     'gridfs:totalLimit',
-    type:    ValueType.NUMBER,
+    ns: 'crowi',
+    key: 'gridfs:totalLimit',
+    type: ValueType.NUMBER,
     default: null, // set null in default for backward compatibility
     //                cz: Newer system respects FILE_UPLOAD_TOTAL_LIMIT.
     //                    If the default value of MONGO_GRIDFS_TOTAL_LIMIT is Infinity,
     //                      the system can't distinguish between "not specified" and "Infinity is specified".
   },
   FORCE_WIKI_MODE: {
-    ns:      'crowi',
-    key:     'security:wikiMode',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'security:wikiMode',
+    type: ValueType.STRING,
     default: undefined,
   },
   SESSION_MAX_AGE: {
-    ns:      'crowi',
-    key:     'security:sessionMaxAge',
-    type:    ValueType.NUMBER,
+    ns: 'crowi',
+    key: 'security:sessionMaxAge',
+    type: ValueType.NUMBER,
     default: undefined,
   },
   USER_UPPER_LIMIT: {
-    ns:      'crowi',
-    key:     'security:userUpperLimit',
-    type:    ValueType.NUMBER,
+    ns: 'crowi',
+    key: 'security:userUpperLimit',
+    type: ValueType.NUMBER,
     default: Infinity,
   },
   DISABLE_LINK_SHARING: {
-    ns:      'crowi',
-    key:     'security:disableSharing',
-    type:    ValueType.BOOLEAN,
+    ns: 'crowi',
+    key: 'security:disableSharing',
+    type: ValueType.BOOLEAN,
     default: false,
   },
   LOCAL_STRATEGY_ENABLED: {
-    ns:      'crowi',
-    key:     'security:passport-local:isEnabled',
-    type:    ValueType.BOOLEAN,
+    ns: 'crowi',
+    key: 'security:passport-local:isEnabled',
+    type: ValueType.BOOLEAN,
     default: true,
   },
   LOCAL_STRATEGY_USES_ONLY_ENV_VARS_FOR_SOME_OPTIONS: {
-    ns:      'crowi',
-    key:     'security:passport-local:useOnlyEnvVarsForSomeOptions',
-    type:    ValueType.BOOLEAN,
+    ns: 'crowi',
+    key: 'security:passport-local:useOnlyEnvVarsForSomeOptions',
+    type: ValueType.BOOLEAN,
     default: false,
   },
   LOCAL_STRATEGY_PASSWORD_RESET_ENABLED: {
-    ns:      'crowi',
-    key:     'security:passport-local:isPasswordResetEnabled',
-    type:    ValueType.BOOLEAN,
+    ns: 'crowi',
+    key: 'security:passport-local:isPasswordResetEnabled',
+    type: ValueType.BOOLEAN,
     default: true,
   },
   LOCAL_STRATEGY_EMAIL_AUTHENTICATION_ENABLED: {
-    ns:      'crowi',
-    key:     'security:passport-local:isEmailAuthenticationEnabled',
-    type:    ValueType.BOOLEAN,
+    ns: 'crowi',
+    key: 'security:passport-local:isEmailAuthenticationEnabled',
+    type: ValueType.BOOLEAN,
     default: false,
   },
   SAML_USES_ONLY_ENV_VARS_FOR_SOME_OPTIONS: {
-    ns:      'crowi',
-    key:     'security:passport-saml:useOnlyEnvVarsForSomeOptions',
-    type:    ValueType.BOOLEAN,
+    ns: 'crowi',
+    key: 'security:passport-saml:useOnlyEnvVarsForSomeOptions',
+    type: ValueType.BOOLEAN,
     default: false,
   },
   SAML_ENABLED: {
-    ns:      'crowi',
-    key:     'security:passport-saml:isEnabled',
-    type:    ValueType.BOOLEAN,
+    ns: 'crowi',
+    key: 'security:passport-saml:isEnabled',
+    type: ValueType.BOOLEAN,
     default: null,
   },
   SAML_ENTRY_POINT: {
-    ns:      'crowi',
-    key:     'security:passport-saml:entryPoint',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'security:passport-saml:entryPoint',
+    type: ValueType.STRING,
     default: null,
   },
   SAML_CALLBACK_URI: {
-    ns:      'crowi',
-    key:     'security:passport-saml:callbackUrl',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'security:passport-saml:callbackUrl',
+    type: ValueType.STRING,
     default: null,
   },
   SAML_ISSUER: {
-    ns:      'crowi',
-    key:     'security:passport-saml:issuer',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'security:passport-saml:issuer',
+    type: ValueType.STRING,
     default: null,
   },
   SAML_ATTR_MAPPING_ID: {
-    ns:      'crowi',
-    key:     'security:passport-saml:attrMapId',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'security:passport-saml:attrMapId',
+    type: ValueType.STRING,
     default: null,
   },
   SAML_ATTR_MAPPING_USERNAME: {
-    ns:      'crowi',
-    key:     'security:passport-saml:attrMapUsername',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'security:passport-saml:attrMapUsername',
+    type: ValueType.STRING,
     default: null,
   },
   SAML_ATTR_MAPPING_MAIL: {
-    ns:      'crowi',
-    key:     'security:passport-saml:attrMapMail',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'security:passport-saml:attrMapMail',
+    type: ValueType.STRING,
     default: null,
   },
   SAML_ATTR_MAPPING_FIRST_NAME: {
-    ns:      'crowi',
-    key:     'security:passport-saml:attrMapFirstName',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'security:passport-saml:attrMapFirstName',
+    type: ValueType.STRING,
     default: null,
   },
   SAML_ATTR_MAPPING_LAST_NAME: {
-    ns:      'crowi',
-    key:     'security:passport-saml:attrMapLastName',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'security:passport-saml:attrMapLastName',
+    type: ValueType.STRING,
     default: null,
   },
   SAML_CERT: {
-    ns:      'crowi',
-    key:     'security:passport-saml:cert',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'security:passport-saml:cert',
+    type: ValueType.STRING,
     default: null,
   },
   SAML_ABLC_RULE: {
-    ns:      'crowi',
-    key:     'security:passport-saml:ABLCRule',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'security:passport-saml:ABLCRule',
+    type: ValueType.STRING,
     default: null,
   },
+  OIDC_TIMEOUT_MULTIPLIER: {
+    ns: 'crowi',
+    key: 'security:passport-oidc:TimeoutMultiplier',
+    type: ValueType.NUMBER,
+    default: 1.5,
+  },
+  OIDC_DISCOVERY_RETRIES: {
+    ns: 'crowi',
+    key: 'security:passport-oidc:DiscoveryRetries',
+    type: ValueType.NUMBER,
+    default: 3,
+  },
   S3_REFERENCE_FILE_WITH_RELAY_MODE: {
-    ns:      'crowi',
-    key:     'aws:referenceFileWithRelayMode',
-    type:    ValueType.BOOLEAN,
+    ns: 'crowi',
+    key: 'aws:referenceFileWithRelayMode',
+    type: ValueType.BOOLEAN,
     default: false,
   },
   S3_LIFETIME_SEC_FOR_TEMPORARY_URL: {
-    ns:      'crowi',
-    key:     'aws:lifetimeSecForTemporaryUrl',
-    type:    ValueType.NUMBER,
+    ns: 'crowi',
+    key: 'aws:lifetimeSecForTemporaryUrl',
+    type: ValueType.NUMBER,
     default: 120,
   },
   GCS_API_KEY_JSON_PATH: {
-    ns:      'crowi',
-    key:     'gcs:apiKeyJsonPath',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'gcs:apiKeyJsonPath',
+    type: ValueType.STRING,
     default: null,
   },
   GCS_BUCKET: {
-    ns:      'crowi',
-    key:     'gcs:bucket',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'gcs:bucket',
+    type: ValueType.STRING,
     default: null,
   },
   GCS_UPLOAD_NAMESPACE: {
-    ns:      'crowi',
-    key:     'gcs:uploadNamespace',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'gcs:uploadNamespace',
+    type: ValueType.STRING,
     default: null,
   },
   GCS_REFERENCE_FILE_WITH_RELAY_MODE: {
-    ns:      'crowi',
-    key:     'gcs:referenceFileWithRelayMode',
-    type:    ValueType.BOOLEAN,
+    ns: 'crowi',
+    key: 'gcs:referenceFileWithRelayMode',
+    type: ValueType.BOOLEAN,
     default: false,
   },
   GCS_USES_ONLY_ENV_VARS_FOR_SOME_OPTIONS: {
-    ns:      'crowi',
-    key:     'gcs:useOnlyEnvVarsForSomeOptions',
-    type:    ValueType.BOOLEAN,
+    ns: 'crowi',
+    key: 'gcs:useOnlyEnvVarsForSomeOptions',
+    type: ValueType.BOOLEAN,
     default: false,
   },
   GCS_LIFETIME_SEC_FOR_TEMPORARY_URL: {
-    ns:      'crowi',
-    key:     'gcs:lifetimeSecForTemporaryUrl',
-    type:    ValueType.NUMBER,
+    ns: 'crowi',
+    key: 'gcs:lifetimeSecForTemporaryUrl',
+    type: ValueType.NUMBER,
     default: 120,
   },
   PROMSTER_ENABLED: {
-    ns:      'crowi',
-    key:     'promster:isEnabled',
-    type:    ValueType.BOOLEAN,
+    ns: 'crowi',
+    key: 'promster:isEnabled',
+    type: ValueType.BOOLEAN,
     default: false,
   },
   PROMSTER_PORT: {
-    ns:      'crowi',
-    key:     'promster:port',
-    type:    ValueType.NUMBER,
+    ns: 'crowi',
+    key: 'promster:port',
+    type: ValueType.NUMBER,
     default: 7788,
   },
   GROWI_CLOUD_URI: {
-    ns:      'crowi',
-    key:     'app:growiCloudUri',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'app:growiCloudUri',
+    type: ValueType.STRING,
     default: null,
   },
   GROWI_APP_ID_FOR_GROWI_CLOUD: {
-    ns:      'crowi',
-    key:     'app:growiAppIdForCloud',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'app:growiAppIdForCloud',
+    type: ValueType.STRING,
     default: null,
   },
   DEFAULT_EMAIL_PUBLISHED: {
-    ns:      'crowi',
-    key:     'customize:isEmailPublishedForNewUser',
-    type:    ValueType.BOOLEAN,
+    ns: 'crowi',
+    key: 'customize:isEmailPublishedForNewUser',
+    type: ValueType.BOOLEAN,
     default: true,
   },
   SLACKBOT_TYPE: {
-    ns:      'crowi',
-    key:     'slackbot:currentBotType', // enum SlackbotType
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'slackbot:currentBotType', // enum SlackbotType
+    type: ValueType.STRING,
     default: null,
   },
   SLACKBOT_INTEGRATION_PROXY_URI: {
-    ns:      'crowi',
-    key:     'slackbot:proxyUri',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'slackbot:proxyUri',
+    type: ValueType.STRING,
     default: null,
   },
   SLACKBOT_WITHOUT_PROXY_SIGNING_SECRET: {
-    ns:      'crowi',
-    key:     'slackbot:withoutProxy:signingSecret',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'slackbot:withoutProxy:signingSecret',
+    type: ValueType.STRING,
     default: null,
   },
   SLACKBOT_WITHOUT_PROXY_BOT_TOKEN: {
-    ns:      'crowi',
-    key:     'slackbot:withoutProxy:botToken',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'slackbot:withoutProxy:botToken',
+    type: ValueType.STRING,
     default: null,
   },
   SLACKBOT_WITHOUT_PROXY_COMMAND_PERMISSION: {
-    ns:      'crowi',
-    key:     'slackbot:withoutProxy:commandPermission',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'slackbot:withoutProxy:commandPermission',
+    type: ValueType.STRING,
     default: null,
   },
   SLACKBOT_WITHOUT_PROXY_EVENT_ACTIONS_PERMISSION: {
-    ns:      'crowi',
-    key:     'slackbot:withoutProxy:eventActionsPermission',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'slackbot:withoutProxy:eventActionsPermission',
+    type: ValueType.STRING,
     default: null,
   },
   SLACKBOT_WITH_PROXY_SALT_FOR_GTOP: {
-    ns:      'crowi',
-    key:     'slackbot:withProxy:saltForGtoP',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'slackbot:withProxy:saltForGtoP',
+    type: ValueType.STRING,
     default: 'gtop',
   },
   SLACKBOT_WITH_PROXY_SALT_FOR_PTOG: {
-    ns:      'crowi',
-    key:     'slackbot:withProxy:saltForPtoG',
-    type:    ValueType.STRING,
+    ns: 'crowi',
+    key: 'slackbot:withProxy:saltForPtoG',
+    type: ValueType.STRING,
     default: 'ptog',
   },
 };

+ 9 - 8
packages/app/src/server/service/passport.ts

@@ -678,18 +678,19 @@ class PassportService implements S2sMessageHandlable {
       // prevent error AssertionError [ERR_ASSERTION]: id_token issued in the future
       // Doc: https://github.com/panva/node-openid-client/tree/v2.x#allow-for-system-clock-skew
       client.CLOCK_TOLERANCE = 5;
-      passport.use('oidc', new OidcStrategy({
-        client,
-        params: { scope: 'openid email profile' },
-      },
-        ((tokenset, userinfo, done) => {
+      passport.use('oidc', new OidcStrategy(
+        {
+          client,
+          params: { scope: 'openid email profile' },
+        },
+        (tokenset, userinfo, done) => {
           if (userinfo) {
             return done(null, userinfo);
           }
 
           return done(null, false);
 
-        })));
+        }));
 
       this.isOidcStrategySetup = true;
       logger.debug('OidcStrategy: setup is done');
@@ -734,8 +735,8 @@ class PassportService implements S2sMessageHandlable {
    * @returns instance of OIDCIssuer
    */
   async getOIDCIssuerInstace(issuerHost) {
-    const OIDC_TIMEOUT_MULTIPLIER = parseInt(process.env.OIDC_TIMEOUT_MULTIPLIER || 'NaN') || 1.5;
-    const OIDC_DISCOVERY_RETRIES = parseInt(process.env.OIDC_DISCOVERY_RETRIES || 'NaN') || 3;
+    const OIDC_TIMEOUT_MULTIPLIER = await this.crowi.configManager.getConfigFromEnvVars('crowi', 'security:passport-oidc:TimeoutMultiplier');
+    const OIDC_DISCOVERY_RETRIES = await this.crowi.configManager.getConfigFromEnvVars('crowi', 'security:passport-oidc:DiscoveryRetries');
     const oidcIssuerHostReady = await this.isOidcHostReachable(issuerHost);
     if (!oidcIssuerHostReady) {
       logger.error('OidcStrategy: setup failed: OIDC Issur host unreachable');