我正在努力在我的web服务中设置身份验证.
我的所有客户机(WPF应用程序)都应该使用相同的凭据来调用web服务操作.
经过一些研究,我提出了基本的身份验证——在HTTP请求的头中发送用户名和密码.
我找到的大多数资源都是使用OAuth或其他中间件实现身份验证的.但对于我的场景来说,这似乎太大了,使用ASP的身份部分也是如此.净核心.
那么,实现我的目标的正确方法是什么呢?在ASP中使用用户名和密码进行简单的身份验证.NET核心web服务?
提前谢谢!
我正在努力在我的web服务中设置身份验证.
我的所有客户机(WPF应用程序)都应该使用相同的凭据来调用web服务操作.
经过一些研究,我提出了基本的身份验证——在HTTP请求的头中发送用户名和密码.
我找到的大多数资源都是使用OAuth或其他中间件实现身份验证的.但对于我的场景来说,这似乎太大了,使用ASP的身份部分也是如此.净核心.
那么,实现我的目标的正确方法是什么呢?在ASP中使用用户名和密码进行简单的身份验证.NET核心web服务?
提前谢谢!
您可以实现一个处理基本身份验证的中间件.
public async Task Invoke(HttpContext context)
{
var authHeader = context.Request.Headers.Get("Authorization");
if (authHeader != null && authHeader.StartsWith("basic", StringComparison.OrdinalIgnoreCase))
{
var token = authHeader.Substring("Basic ".Length).Trim();
System.Console.WriteLine(token);
var credentialstring = Encoding.UTF8.GetString(Convert.FromBase64String(token));
var credentials = credentialstring.Split(':');
if(credentials[0] == "admin" && credentials[1] == "admin")
{
var claims = new[] { new Claim("name", credentials[0]), new Claim(ClaimTypes.Role, "Admin") };
var identity = new ClaimsIdentity(claims, "Basic");
context.User = new ClaimsPrincipal(identity);
}
}
else
{
context.Response.StatusCode = 401;
context.Response.Headers.Set("WWW-Authenticate", "Basic realm=\"dotnetthoughts.net\"");
}
await _next(context);
}
此代码是用ASP.NET核心的测试版编写的.希望能有所帮助.