ASP.NET Core 2.0 中 Web API 的本地用户帐户存储

Posted

技术标签:

【中文标题】ASP.NET Core 2.0 中 Web API 的本地用户帐户存储【英文标题】:Local user account store for Web API in ASP.NET Core 2.0 【发布时间】:2017-08-17 11:42:35 【问题描述】:

我正在使用 ASP.Net Core 2.0,我想构建一个具有个人用户帐户授权类型的 Web API 项目,但唯一的选择是Connect to an existing user store in the cloud

如何使用Store user accounts in-app 为个人用户帐户添加 Web API 模板?

此选项适用于 Web 应用程序,但不适用于 Web API。

【问题讨论】:

很想知道这个问题的答案。在 Mac 上,情况更糟 - 您甚至无法选择个人用户帐户。 【参考方案1】:

尝试在控制台中使用命令启动您的项目

dotnet new webapi -au Individual

之后您可以在 VS 中打开您的项目。 (解决对话框)。然后您可以使用例如授权属性。 但该项目仍配置为使用 Azure 承载身份验证。 你必须决定从哪里获得身份。 您可以使用 identityserver4 或构建自己的“ASP.NET Core Identity 的自定义存储提供程序”(MS-Docs)

与 MVC WebApp 的区别:这里有一个帐户控制器,其中包含处理注册和获取用户名和密码等的视图。

【讨论】:

"但该项目仍配置为使用 Azure 承载身份验证。" 我很困惑这如何回答问题 - 您没有在应用程序中执行身份验证生成的项目。它仍然依赖于 Azure。 services.AddAuthentication(sharedOptions => sharedOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; ) .AddAzureAdB2CBearer(options => Configuration.Bind("AzureAdB2C", options)); 2022年1月有没有办法通过模板向webapi添加个人身份验证?【参考方案2】:

我对同样的事情感到困惑,最终选择了Web Application 而不是Web API。 MS 删除“应用内帐户”可能存在逻辑 - 使用 Web API,您可能正在编写 SPA,并且“视图”(登录名、忘记密码等)应该在您的客户端代码中;不是服务器上的 Razor 视图。

注意,如果您使用 IdentityServer 4,视图将在 IS4 应用程序中生成; 在业务 API 应用程序中。

所以我认为微软在这里试图给你一个提示......

【讨论】:

我同意菲利克斯的观点。您可以只选择 Web 应用程序模板,然后删除帐户管理的视图和控制器,并将 Startup.cs 修改为仅具有基于令牌的身份验证所需的中间件。 @ajawad987 完成后您的Startup.cs 中还剩下什么? 2022年1月有没有办法通过模板向webapi添加个人身份验证?【参考方案3】:

为了得到答案,我构建了没有身份验证的 API 版本和有身份验证的版本,然后对生成的文件夹进行了比较(并忽略了 appsettings.json 中的一个额外代码块,该代码块在您使用 cloud-auth 时出现选项)。

原来启用身份验证只需要几行代码。

如果您对 API 模板的无身份验证版本进行以下更改,您将拥有一个身份验证版本:

Startup.cs 中的“使用”部分添加:using Microsoft.AspNetCore.Authentication;。另外在app.UseMvc();前面加上:app.UseAuthentication();如下图:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)

    if (env.IsDevelopment())
    
        app.UseDeveloperExceptionPage();
    
    else
    
        app.UseHsts();
    

    app.UseHttpsRedirection();
    app.UseAuthentication();
    app.UseMvc();

Controllers\ValuesController.cs 中,在“使用”部分添加:using Microsoft.AspNetCore.Authorization;。还要添加:[Authorize] 紧接在[Route("api/[controller]")] 上方

这就是向 vanilla API 模板添加模板化身份验证所需的全部内容。当然,您需要添加实际的身份验证代码,但在模板级别,您就完成了。

(旁注:Microsoft 在 Auth 版本中还做了一个可选假设,即您将使用 UserSecretsId,因此如果您也需要,只需右键单击解决方案并选择管理用户机密。)

【讨论】:

2022年1月有没有办法通过模板向webapi添加个人身份验证?

以上是关于ASP.NET Core 2.0 中 Web API 的本地用户帐户存储的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 2017 Web Proj ASP.NET Core 2.0 中禁用 Https

asp.net core 2.0 web api基于JWT自定义策略授权

从头编写 asp.net core 2.0 web api 基础框架

ASP.Net Core 2.0 - 引用“Microsoft.NET.Sdk.Web”且“PreserveCompilationContext”属性未设置为 false

用VSCode开发一个asp.net core2.0+angular5项目: Angular5+asp.net core 2.0 web api文件上传

Handle Refresh Token Using ASP.NET Core 2.0 And JSON Web Token