我正在努力解决如何在我的Web服务中设置身份验证的问题 . 该服务是使用ASP.NET Core web api构建的 .
我的所有客户端(WPF应用程序)都应使用相同的凭据来调用Web服务操作 .
经过一些研究,我想出了基本的身份验证 - 在HTTP请求的标头中发送用户名和密码 . 但经过几个小时的研究,在我看来,基本身份验证不是ASP.NET Core的方法 .
我发现的大多数资源都是使用OAuth或其他一些中间件实现身份验证 . 但是对于我的场景,以及使用ASP.NET Core的Identity部分,这似乎过大了 .
那么实现我的目标的正确方法是什么 - 在ASP.NET Core Web服务中使用用户名和密码进行简单的身份验证?
提前致谢!
6 回答
您可以实现处理基本身份验证的中间件 .
此代码是在asp.net核心的beta版本中编写的 . 希望能帮助到你 .
现在,在我指出正确的方向后,这是我的完整解决方案:
这是在每个传入请求上执行的中间件类,并检查请求是否具有正确的凭据 . 如果没有凭据或者它们是错误的,则服务立即响应401 Unauthorized错误 .
需要在服务Startup类的Configure方法中调用中间件扩展
就这样! :)
可以在此处找到.Net Core中的中间件和身份验证的非常好的资源:https://www.exceptionnotfound.net/writing-custom-middleware-in-asp-net-core-1-0/
要仅将其用于特定控制器,请使用以下命令:
我想你可以和JWT(Json Web Tokens)一起去 .
首先,您需要安装包System.IdentityModel.Tokens.Jwt:
您将需要添加一个用于令牌生成和身份验证的控制器,如下所示:
之后更新Startup.cs类如下所示:
就是这样,现在剩下的就是将
[Authorize]
属性放在你想要的控制器或动作上 .这是一个完整的直接教程的链接 .
http://www.blinkingcaret.com/2017/09/06/secure-web-api-in-asp-net-core/
我已经实现
BasicAuthenticationHandler
进行基本身份验证,因此您可以将它与标准属性Authorize
和AllowAnonymous
一起使用 .在Startup.cs注册 -
app.UseMiddleware<BasicAuthenticationMiddleware>();
. 使用此代码,您可以使用标准属性Autorize限制任何控制器:如果在应用程序级别应用授权筛选器,请使用属性
AllowAnonymous
.ASP.NET Core 2.0 with Angular
https://fullstackmark.com/post/13/jwt-authentication-with-aspnet-core-2-web-api-angular-5-net-core-identity-and-facebook-login
确保使用验证过滤器类型
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]