无法从静态 Web 应用程序读取配置值

问题描述 投票:0回答:2

我已经在 Azure 中部署了一个具有以下配置设置的静态 Web 应用程序:

    REACT_APP_AAD_UI_APP_CLIENT_ID: 'xxxx'
    REACT_APP_AAD_API_APP_CLIENT_ID: 'yyyy'
    REACT_APP_AAD_APP_TENANT_ID: 'abcd'
    REACT_APP_AAD_APP_SERVICE_BASE_URI: 'https://xxx.api.azurewebsites.net'

山药:

steps:
  - task: AzureResourceManagerTemplateDeployment@3
    displayName: 'Deploy WebApp compute resources'
    inputs:
      azureResourceManagerConnection: ${{parameters.serviceConnection}}
      subscriptionId: ${{parameters.subscriptionId}}
      resourceGroupName: ${{parameters.resourceGroupName}}
      location: ${{parameters.location}}
      csmFile: ${{ parameters.root }}/compute/template.bicep
      csmParametersFile: ${{ parameters.root }}/compute/parameters.json      
      deploymentMode: 'Incremental'
      deploymentOutputs: deploymentOutputs

  - task: AzureStaticWebApp@0
    name: DeployStaticWebApp
    displayName: Deploy Static Web App
    inputs:
      app_location: 'web-app'
      cwd: '${{ parameters.root }}/webapp_package'
      azure_static_web_apps_api_token: $(deployment_token)

template.bicep

resource staticWebApp 'Microsoft.Web/staticSites@2022-03-01' = {
  name: '${solutionAbbreviation}-ui'
  location: location
  sku: {
    name: 'Free'
    tier: 'Free'
  }
  properties: {
    allowConfigFileUpdates: true
    branch: branch
    buildProperties: {
      appLocation: 'UI/web-app'
      skipGithubActionWorkflowGeneration: true
    }
    enterpriseGradeCdnStatus: 'Disabled'
    provider: 'DevOps'
    repositoryUrl: repositoryUrl
    stagingEnvironmentPolicy: 'Disabled'
  }
}

resource staticWebAppAppSettings 'Microsoft.Web/staticSites/config@2022-03-01' = {
  parent: staticWebApp
  name: 'appsettings'
  properties: {
    REACT_APP_AAD_UI_APP_CLIENT_ID: 'ui-client-id'
    REACT_APP_AAD_API_APP_CLIENT_ID: 'api-client-id'
    REACT_APP_AAD_APP_TENANT_ID: 'tenant-id'
    REACT_APP_AAD_APP_SERVICE_BASE_URI: 'url'
  }
}

我有以下 authConfig.ts:

import { Configuration } from "@azure/msal-browser";

// Config object to be passed to Msal on creation
export const msalConfig: Configuration = {
    auth: {
        clientId: `${process.env["REACT_APP_AAD_UI_APP_CLIENT_ID"]}`,
        authority: `https://login.microsoftonline.com/${process.env["REACT_APP_AAD_APP_TENANT_ID"]}`,
        redirectUri: "/",
        postLogoutRedirectUri: "/"
    }
};

// scopes
export const loginRequest = {
    scopes: [`api://${process.env["REACT_APP_AAD_API_APP_CLIENT_ID"]}/user_impersonation`]
  };

// endpoints 
export const config = {
    endpoint: `${process.env["REACT_APP_AAD_APP_SERVICE_BASE_URI"]}/api/v1/items`
};

在部署后运行它,我看到这个错误:

未捕获(承诺)ClientAuthError:endpoints_resolution_error:错误:无法解析端点。请检查网络并重试。详细信息:ClientAuthError:openid_config_error:无法检索端点。检查您的权限并验证 .well-known/openid-configuration 端点返回所需的端点。尝试从以下位置检索端点:https://login.microsoftonline.com/v2.0/.well-known/openid-configuration

看起来它无法从配置设置中获取值(看起来它没有从配置中读取 tenantId)

在控制台中运行 process.env["REACT_APP_AAD_APP_TENANT_ID"] 时,我看到 Uncaught ReferenceError: process is not defined at :1:1

我错过了什么?

这是在我添加具有以下值的 .env 文件后在本地运行的:

    REACT_APP_AAD_UI_APP_CLIENT_ID= 'xxxx'
    REACT_APP_AAD_API_APP_CLIENT_ID= 'yyyy'
    REACT_APP_AAD_APP_TENANT_ID= 'abcd'
    REACT_APP_AAD_APP_SERVICE_BASE_URI= 'https://xxx.api.azurewebsites.net'

reactjs msal azure-static-web-app static-web-apps
2个回答
0
投票

process
对象在 node.js 环境中可用。您无法从浏览器控制台访问它。但是,当应用程序在 node.js 上下文中运行时,您可以将其记录在代码中以检查日志。

当您添加 .env 文件时,它开始在本地运行,因为 node.js 应用程序在其引导过程中加载它并使变量可用。在 Azure 服务器上运行构建的代码时,如果您没有在 node.js 上下文中运行它,那么您需要执行以下操作。

你需要有一个来源来获取它。在构建期间,您需要将 .env 文件中的值转换为部署包中包含的类似 config.json 或 yaml 文件的文件。在您的代码中,您读取此文件并将值合并到您的配置对象中。但是,请注意,从该文件读取时,您的配置值将被公开。

如果您在 Azure 服务器上的 node.js 上下文中运行它,则需要包含 .env 文件。这不会暴露您的配置值。

另一种方法是从运行应用程序的容器中提供配置值 - 假设您有一个 Web 应用程序并且您的 React 应用程序正在其上下文中运行,然后您可以将配置提升到全局窗口对象中并使用它。假设你将它加载到 window.appname.config 并从那里读取它。

希望这有帮助。


-1
投票
import { Configuration } from "@azure/msal-browser";

// Config object to be passed to Msal on creation
export const msalConfig: Configuration = {
    auth: {
        clientId: `${process.env.REACT_APP_AAD_UI_APP_CLIENT_ID}`,
        authority: `https://login.microsoftonline.com/${process.env.REACT_APP_AAD_APP_TENANT_ID}`,
        redirectUri: "/",
        postLogoutRedirectUri: "/"
    }
};

// scopes
export const loginRequest = {
    scopes: [`api://${process.env.REACT_APP_AAD_API_APP_CLIENT_ID}/user_impersonation`]
  };

// endpoints 
export const config = {
    endpoint: `${process.env.REACT_APP_AAD_APP_SERVICE_BASE_URI}/api/v1/items`
};
© www.soinside.com 2019 - 2024. All rights reserved.