我正在开发一个以 VueJS 作为前端、Azure Functions 作为后端的 Web 应用程序。该应用程序将供公司内部使用,因此无需登录社交网络。所以我们计划使用 AspNetCore Identity,它是成熟的并且似乎可以与 Functions 一起使用,只是还没有找到如何使用。
我设法让依赖注入为函数工作:
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
string conn = Environment.GetEnvironmentVariable("sqldb_connection");
builder.Services.Configure<IdentityOptions>(options =>
{
options.Password.RequireDigit = true;
options.Password.RequireLowercase = true;
options.Password.RequireNonAlphanumeric = true;
options.Password.RequireUppercase = true;
options.Password.RequiredLength = 6;
options.Password.RequiredUniqueChars = 1;
options.SignIn.RequireConfirmedEmail = false;
options.SignIn.RequireConfirmedPhoneNumber = false;
options.User.RequireUniqueEmail = true;
});
builder.Services.AddDbContext<DatabaseContext>(o =>
{
o.UseSqlServer(conn ?? throw new NullReferenceException("Environment Variable is Null"));
});
builder.Services.AddIdentity<IdentityUser, IdentityRole>()
.AddEntityFrameworkStores<DatabaseContext>();
builder.Services.AddAuthentication(options =>
{
options.AddScheme<JwtBearerHandler>("JWT", "JWT Bearer Handler");
});
}
}
我不知道
AddScheme<JwtBearerHandler>(...);
是否是正确的方法,如果是的话,也不知道如何使用它。我发现 this 可以消耗令牌,但是如何创建它?
Azure Function Http 端点和 Asp.Net Core WebApp 以及配置它们使用 AspIdentity 中间件的方式没有区别。
中间件概述:https://www.re-mark-able.net/blogs/2021/05/09/azure-functions-middleware.html
Asp.Net Core 上的示例 AspIdentity:https://weblog.west-wind.com/posts/2021/Mar/09/Role-based-JWT-Tokens-in-ASPNET-Core
关于为已生成的 JWT 令牌提供属性过滤的答案:@BenMorris 的一个很好的答案,带有 github 存储库
要获取 JWT 令牌,请将用户名和密码发送到新的 HttpEndpoint 函数,该函数与上面 Rick Strahls 博客文章中的“身份验证”相匹配。
据我从您的问题中了解到和理解,您想要在Azure功能中设置Azure AD。为此,您只需在门户上进行配置设置即可。
第1步:
第2步:
第三步:
第四步:
后来通过 ARM 模板实现自动化。
您可以参考本教程:Azure Functions 中的 Azure AD 身份验证