如何构建通用身份验证Web API?

时间:2015-11-05 19:00:30

标签: asp.net-mvc authentication asp.net-identity asp.net-core-mvc

我正在构建一个Web API应用程序,主要用于提供纯HTML + Angular UI应用程序,但也适用于任何授权方。现在我想主要使用Web API,以及UI,以使用“注入/配置”的身份验证服务。我想编写最少的代码,并真正充分利用ASP.NET和Identity可以为此提供的内容。

实现此目标的既定和/或接受的模型和实践是什么?

当然,应用程序所有者不能使用任何身份验证服务,它必须符合原型,可能实现接口,或使用某些自定义服务等,但我希望我的应用程序能够轻松切换最常见的场景,无论现在是什么。

2 个答案:

答案 0 :(得分:0)

请注意,这些只是最基本的设置。我强烈建议从已经配置了身份的File > New Project开始。

在所有应用程序中实现身份更加复杂,因为您需要应用程序的所有级别才能使其正常工作(可视化,业务逻辑,数据库等)

如果您需要完整的解决方案,我会查看IdentityServer及其samples

Startup.cs/ConfigureServices确保拥有以下部分:

// Configure our application database context to be Entity Framework backed by SQL Server
services.AddEntityFramework()
    .AddSqlServer()
    .AddDbContext(options =>
        options.UseSqlServer(Configuration.Get("Database:Connection")));

// Specify the configuration of our Application database context
services.Configure(options =>
{
    options.DefaultUsername = Configuration.Get("DefaultUser:Username");
    options.DefaultPassword = Configuration.Get("DefaultUSer:Password");
});

// Configure ASP.NET Identity to use our Identity-based application context
services.AddIdentity()
    .AddEntityFrameworkStores()
    .AddDefaultTokenProviders();

config.json

中需要这样的内容
{
  "Mode": "Development",
  "Database": {
    "Connection": "Server=(localdb)\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "DefaultUser": {
    "Username": "myUsername",
    "Password": "MyP@ssword!"
  }
}

然后在你的Startup.cs/Configure我们实际上必须使用服务本身:

app.UseIdentity();

唯一缺少的是控制器上的AuthorizeAttribute

答案 1 :(得分:0)

首先,我想说安全很难。

第二件事,MVC安全性通常是基于cookie的。 Cookie可以通过本地登录页面获取,也可以使用外部身份提供程序(SSO)获取。如果它是从中央SSO提供商处获得的,那么您需要查看协议,例如 WS-Federation OpenID Connect ,或者您可以使用社交媒体提供商< / em>各种实现。

第三件事,Web API安全性(这将是您从客户端角度代码保护的方式)将是基于令牌的。该令牌将通过 OAuth 获得。这意味着您需要 OAuth授权服务器。这可以在本地托管(就像您使用本地登录页面进行基于cookie的身份验证一样),也可以集中托管(就像对外部SSO登录提供程序一样)。

随着前端框架的发展以及我们如何构建Web应用程序的巨大变化,现在验证用户的首选方法是使用签名令牌作为此令牌随每个请求发送到服务器。使用这种方法的一些好处是:

  • 服务器的可扩展性
  • 松散耦合
  • 移动友好

有一个很好的教程和演示 Token Based Authentication using ASP.NET Web API 2, Owin, and Identity

另外,请查看IdentityServer3

  

是一个允许实现的框架和托管组件   现代Web应用程序和API的单点登录和访问控制   使用OpenID Connect和OAuth2等协议。它支持广泛   一系列客户,如移动,网络,SPA和桌面应用程序   是可扩展的,允许集成到新的和现有的体系结构中。