配置 ADAL 时 Pulumi AD Application 和 Azure Function 循环依赖

Pulumi AD Application and Azure Function circular dependency when configuring ADAL

我正在设置一个带有 ADAL 身份验证的 azure 函数,我遇到了 pulumi 的一个问题,因为函数应用需要创建广告应用,然后广告应用需要创建函数应用才能设置回复 url.

const adAppName = `${projectName}-${env}`
const adApp = new azuread.Application(adAppName, {
    name: adAppName,
    requiredResourceAccesses: [
        {
            resourceAccesses: [
                {
                    id: "311a71cc-e848-46a1-bdf8-97ff7156d8e6",
                    type: "Scope",
                },
            ],
            resourceAppId: "00000002-0000-0000-c000-000000000000",
        }
    ],
    replyUrls: [ 'https://myapp.azurewebsites.net/.auth/login/aad/callback' ] // This url is hardcoded
});

const appFunctionName = `${projectName}-${env}`;
const appFunction = new azure.appservice.FunctionApp(appFunctionName, {
    ...resourceGroupArgs,
    name: appFunctionName,
    appServicePlanId: appServicePlan.id,
    authSettings: {
        enabled: true,
        unauthenticatedClientAction: 'RedirectToLoginPage',
        defaultProvider: 'AzureActiveDirectory',
        issuer: `https://sts.windows.net/${azure.config.tenantId}/`,
        activeDirectory: {
            clientId: adApp.applicationId
        }
    },
    storageConnectionString: storageAccount.primaryConnectionString,
    version: '~2',
    appSettings: appSettings,

});

我们如何解决这种循环引用?我想使用 appFunction url.

的值创建 replyUrls

谢谢

我认为没有办法解决这种循环依赖。

但是由于您有一个应用服务的固定名称,它的 URL 是可以预测的。您可以将 appFunctionName 声明移到顶部,然后在 replyUrls 赋值中使用它:

replyUrls: [ `https://${appFunctionName}.azurewebsites.net/.auth/login/aad/callback` ]

我看不出这样做有什么坏处。无论如何,您都必须格式化此 URL,与使用 defaultHostName.

相比,现在您只得到一个额外的 .azurewebsites.net