我正在努力在我的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核心的测试版编写的.希望能有所帮助.

Asp.net相关问答推荐

在这个 For 循环计数没有增加

ASP.NET Web 应用程序 (.NET Framework) 与 ASP.NET Core Web 应用程序 (.NET Framework) 之间的差异

ASP.Net - App_Data & App_Code 文件夹?

使用 C# 和 ASP.NET 从 Gmail/Hotmail/Yahoo 导入通讯簿

Window.Open 使用 PDF 流而不是 PDF 位置

Anti-Forgery Token 适用于不同的基于声明的用户

如何从 asp:Repeater 循环遍历项目模板中的项目?

使用 gridview asp.net 进行排序和分页

与将 Web 应用程序保存在一个默认应用程序池中相比,拥有专用应用程序池的优缺点

可空日期时间转换

Ef core:执行 MaxAsync 时序列不包含任何元素

ASP.NET 会话超时测试

在 ASP.NET MVC 中使用 Razor 创建可重用的 HTML 视图组件

如何从 ASP.Net 发布然后重定向到外部 URL?

如何防止 XXE 攻击(.NET 中的 XmlDocument)

服务器标签格式不正确错误

如何在服务器控件属性中使用 ASP.NET <%= 标签?

如何检索 X509Store 中的所有证书

您将如何将 ASP.Net MVC 嵌入到现有的网站项目中?

如何在asp.net的GridView中按列名而不是按索引获取单元格值