首页 > 解决方案 > Azure Function v3 - 在启动中添加标识时“无法访问 Azure Functions 运行时”

问题描述

我有一个Azure Function (v3)必须与数据库以及用户管理交互的东西。它具有一个依赖项,该项目还包含 DAL 以及所有上下文配置。在函数的启动中,我将依赖项添加到DbContextAzure 并将其部署在 Azure 上,我没有任何问题。除了DbContext我还添加Identity和重新部署之外,门户网站显示“无法访问 Azure Functions 运行时”。

这是功能Startup.cs

[assembly: FunctionsStartup(typeof(Directio.PeopleSee.OrderSynchronizer.Startup))]

namespace Directio.PeopleSee.OrderSynchronizer
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.Services.AddHttpClient();

            builder.Services.AddDbContext<DBContext>(options1 =>
            {
                options1.UseLazyLoadingProxies(false);
                options1.UseSqlServer(Environment.GetEnvironmentVariable("DBConnectionString"), builder =>
                {
                    builder.CommandTimeout(10);
                }
                );
            })
            .AddIdentity<AspNetUser, AspNetRole>(opt =>
             {
                 opt.Password.RequireDigit = false;
                 opt.Password.RequireLowercase = false;
                 opt.Password.RequireNonAlphanumeric = false;
                 opt.Password.RequireUppercase = false;
                 opt.Password.RequiredLength = 0;
                 opt.Password.RequiredUniqueChars = 0;
                 opt.User.RequireUniqueEmail = false;
                 opt.SignIn.RequireConfirmedEmail = false;
                 opt.SignIn.RequireConfirmedAccount = false;
                 opt.SignIn.RequireConfirmedPhoneNumber = false;
             })
            .AddEntityFrameworkStores<DBContext>()
            .AddDefaultTokenProviders();

            builder.Services.AddOptions<FunctionAppSettings>().Configure<IConfiguration>((settings, configuration) => configuration.GetSection("FunctionAppSettings").Bind(settings));

            builder.Services.AddScoped<IUnitOfWork, UnitOfWork>();
            builder.Services.AddScoped<IUserService, UserServiceImpl>();
            builder.Services.AddScoped<IRoleService, RoleServiceImpl>();
            builder.Services.AddScoped<ISubscribersService, SubscriberServiceImpl>();
            builder.Services.AddScoped<IOrdersService, OrdersService>();
        }
    }
}

所有服务注册都来自依赖项链接到的项目。该功能netcore3.1作为一个框架,并部署在一个 Azure Func App 中,采用即用即付计划,Windows 服务器,它不是一个 docker 容器。

可能是什么问题呢?

标签: azureasp.net-coreazure-functions

解决方案


添加身份时,您还添加了 AspNetCore 身份验证依赖项。出于某种原因,Functions host 检查您的应用程序中是否存在这些依赖项,并阻止 Host 模块添加允许门户访问项目中的功能的内置身份验证方案。

如果您仍想在启动时加载身份组件,我鼓励您查看https://www.nuget.org/packages/DarkLoop.Azure.Functions.Authorize

这是一篇描述其工作原理的帖子:https ://blog.darkloop.com/post/functionauthorize-for-azure-functions-v3

你可以打电话

builder.AddAuthentication();
builder.AddAuthorization();
// or
builder.Services.AddFunctionsAuthentication();
builder.Services.AddFunctionsAuthorization();

此调用强制加载内置身份验证功能,并允许您添加更多身份验证依赖项和方案。

通话结束后,您可以拨打电话AddDbContext<...AddIdentity<...

Azure 门户应该能够获得它需要的关于你的函数的所有信息。


推荐阅读