我正纠结于如何在我的网络服务中设置身份验证。这个服务是用ASP.NET核心网络API构建的。
我的所有客户端(WPF应用程序)都应该使用相同的凭据来调用Web服务操作。
经过一番研究,我提出了基本身份验证--在HTTP请求的头中发送用户名和密码。但是经过几个小时的研究,我认为基本身份验证不是ASP.NET核心中的正确做法。
我找到的大多数资源都是使用OAuth或其他一些中间件来实现身份验证的,但这对于我的场景以及使用ASP .NETCore的Identity部分来说似乎太大了。
那么,实现我的目标的正确方法是什么--在ASP .NETCoreWeb服务中使用用户名和密码进行简单的身份验证?
9条答案
按热度按时间brtdzjyr1#
现在,在我被指出正确的方向后,我的完整解决方案如下:
这是在每个传入请求上执行的中间件类,用于检查请求是否具有正确的身份证明。如果没有身份证明或身份证明错误,服务将立即以 401 Unauthorized 错误进行响应。
需要在服务Startup类的Configure方法中调用中间件扩展
就是这样!:)
关于.Net Core中的中间件和身份验证的一个非常好的资源可以在这里找到:https://www.exceptionnotfound.net/writing-custom-middleware-in-asp-net-core-1-0/
v1uwarro2#
您可以实现一个处理基本身份验证的中间件。
这段代码是在www.example.com核心的beta版本中编写asp.net的。希望它能有所帮助。
kulphzqa3#
例如,要仅对特定控制器使用此选项,请使用以下命令:
6tdlim6h4#
我认为您可以使用JWT(Json Web令牌)。
首先,您需要安装System.IdentityModel.Tokens.Jwt包:
您需要添加一个控制器来生成令牌和进行身份验证,如下所示:
之后,更新Startup.cs类,如下所示:
就是这样,现在剩下的就是把
[Authorize]
属性放在你想要的控制器或动作上。这里是一个完整的直接教程的链接。
http://www.blinkingcaret.com/2017/09/06/secure-web-api-in-asp-net-core/
mefy6pfw5#
我已经实现了
BasicAuthenticationHandler
用于基本身份验证,因此您可以将其与标准属性Authorize
和AllowAnonymous
一起使用。在Startup. cs-
app.UseMiddleware<BasicAuthenticationMiddleware>();
注册。使用此代码,您可以限制任何具有标准属性Autorize的控制器:如果在应用程序级别应用授权过滤器,则使用属性
AllowAnonymous
。8gsdolmq6#
正如之前的文章所言,其中一种方法是实现一个自定义的基本身份验证中间件。我在这个博客中找到了最好的工作代码:Basic Auth with custom middleware
我提到了同一个博客,但不得不做2个适应:
1.在启动文件-〉配置函数中添加中间件时,务必先添加自定义中间件,再添加app.UseMvc()。
1.从appsettings.json文件阅读用户名、密码时,在启动文件中添加静态只读属性。然后从appsettings.json读取。最后,从项目中的任何位置读取值。示例:
mm9b1k5b7#
您可以使用
ActionFilterAttribute
并将该属性添加到控制器
[BasicAuth("USR", "MyPassword")]
jslywgbw8#
在这个公开的Github repo https://github.com/boskjoett/BasicAuthWebApi中,你可以看到一个简单的API示例,它的端点受到基本身份验证的保护。
dzjeubhm9#
ASP.NET核心2.0(带Angular )
https://fullstackmark.com/post/13/jwt-authentication-with-aspnet-core-2-web-api-angular-5-net-core-identity-and-facebook-login
确保使用身份验证筛选器的类型
[授权(验证方案= JwtBearer默认值.验证方案)]