2

我正在使用 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。

谢谢

4

1 回答 1

3

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

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

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

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

于 2019-10-30T11:57:42.917 回答