使用Windows Auth对用户进行身份验证,然后在ASPNET Core 2.1中生成JWT

2024-02-18

我有一个 ASP.NET Core 2.1 WebApi,我在其中实现了 JWT 身份验证。用户调用api/authentication/authenticate,在消息正文中传递他们的用户名/密码,并返回 JWT,然后他们使用该 JWT 来访问服务。

我还需要 API 来接受 Windows 身份验证——用户将调用api/authentication/windows如果不传递任何用户信息,该服务将检查它们是否在 web.config 文件中列出的授权用户列表中(如果我托管在 IIS 中)。如果是,则返回 JWT 令牌,用户可以使用它来访问服务。

目前我正在思考这个问题...

  1. The api/authentication/windows方法将从请求中获取用户名
  2. 根据授权用户列表检查用户名。如果它们在上面,则返回一个令牌。如果没有,请转到(3)
  3. 检查授权用户列表中的任何组。如果他们是成员,则返回一个令牌。如果不存在,则返回 401 Unauthorized 错误

这是处理这个问题的正确方法吗?

这里非常相似(未回答)的问题:使用 Windows 身份验证成功进行身份验证后生成 JWT 令牌 https://stackoverflow.com/questions/54045940/generate-jwt-token-on-successful-authentication-with-windows-authentication


如果您想同时启用 JWT 和 AD 身份验证,在我的选项中,您仍然需要在 Web api 中针对 Active Directory 验证用户的凭据(用户名/密码):

https://www.brechtbaekelandt.net/blog/post/authenticating-against-active-directory-with-aspnet-core-2-and-managing-users https://www.brechtbaekelandt.net/blog/post/authenticating-against-active-directory-with-aspnet-core-2-and-managing-users

仅传递用户名是行不通的,因为 web api 中没有经过身份验证的用户上下文。

验证用户凭证后,您可以照常生成 jwt 令牌,例如如果使用 HS256:

private string BuildToken()
{
    var claims = new[] {
        new Claim(JwtRegisteredClaimNames.NameId,"name1"),
        new Claim(JwtRegisteredClaimNames.Sub,"name1"),
        new Claim("customer","customer1"),
        new Claim(JwtRegisteredClaimNames.Email,"wuxiyuan@sina,com"),
        new Claim("role","user"),
    };

    var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("Youkey"));
    var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

    var token = new JwtSecurityToken("name1",
        "name1",
    claims,
    expires: DateTime.Now.AddDays(1),
    signingCredentials: creds);

    return new JwtSecurityTokenHandler().WriteToken(token);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Windows Auth对用户进行身份验证,然后在ASPNET Core 2.1中生成JWT 的相关文章

随机推荐

  • ER模型对函数依赖解决方案的解释

    我正在尝试理解一项将 ER 模型转换为函数依赖关系的练习的解决方案 正如您在上面所看到的 我们只有关系名称 除此之外没有其他任何东西 通过解决方案 他们以某种方式得出结论 母亲 女儿 父亲 父亲 女儿 母亲 母亲 儿子 父亲 父亲 儿子 母
  • 为什么我不能使用 php 将数据插入 mysql 数据库

    这相当令人沮丧 我确信这是一个简单的解决方法 据我所知 我的代码是正确的 这让我相信存在服务器问题 我已经创建了数据库 我可以从命令行将数据插入表中 如果有帮助的话我正在使用WAMP
  • 对前十个结果进行排序

    我得到一个列表 其中我通过以下方式保存结果 City Percentage Mumbai 98 30 London 23 23 Agra 12 22 列表结构为 Mumbai 98 30 London 23 23 我以列表的形式保存这些记录
  • 如何在 Windows 上向 Perl 发送信号?

    我有一些建立信号处理程序的 Perl 代码 SIG KILL sub 我的任务是将其移植到 Windows 我想知道如何从 C 类生成此信号 我看到了Process Kill方法中的System Diagnostics Process类似乎
  • 使用工厂的 Angular.JS API

    我编写了一个后端服务 供 Angular JS 前端使用工厂使用 如下所示 angular module app social ngResource factory Social function http return me functi
  • 如何从 ValueTransformer 中的 Punctuator 实例向下游转发事件?

    在 KafkaStream 中 当实现值转换器 or 带键的值转换器 on 转换 打电话 我安排一个新的标点符号 当方法圈点 of the 标点符号执行后我希望它使用上下文实例向下游转发事件 然而 作为 DSL 拓扑的一部分 上下文实例似乎
  • 从 CSV 导入 Ruby 数组,第一个字段作为哈希键,然后查找给定标题行的字段值

    也许有人可以帮助我 从 CSV 文件开始 如下所示 Ticker Price Market Cap ZUMZ 30 00 933 90 XTEX 16 02 811 57 AAC 9 83 80 02 我设法将它们读入数组 require
  • 如何使用 Boost Graph Library 创建named_graph?

    我目前正在使用 Boost Graph Library 我需要独特的边和顶点 不幸的是 升压图不提供此功能 所以每次插入边或顶点之前我都必须检查手册 现在我发现了这个 http www boost org doc libs 1 49 0 b
  • Node.js Elastic Beanstalk 在重负载下拒绝连接 (ECONNRESET)

    我将一个简单的 Node js Express 应用程序部署到 Elastic Beanstalk 使用loadtest https www npmjs com package loadtestnpm 包 我直接使用 EC2 实例 绕过 E
  • 由于缺少元数据 dll,.NET Framework 项目 4.5.2 无法在 Jenkins 中构建

    无法使用 Jenkins 构建 NET Framework 解决方案 我收到一条错误消息CSC error CS0006 Metadata file packages Microsoft CodeAnalysis Analyzers 1 1
  • 非法继承,同时用自我类型扩展特质

    我对以下代码感到困惑 trait T1 type S trait T2 self T1 gt case class ClS s S object O extends T2 它给出以下错误消息 非法继承 tests O type 不符合tes
  • 操作系统如何知道物理内存的实际大小?

    当计算机启动时加载操作系统时 操作系统如何知道硬件信息 是否有一些io指令或引导程序从BIOS获取信息 主板固件 也称为 BIOS ACPI 接口或 EFI 允许操作系统找出系统中 RAM 和 ROM 的物理映射 例如 这是启动 Linux
  • 将同一类别添加到多个类中

    我有一个 Objective C 类别 我想将其添加到多个类中 而不重复该类别中包含的代码 我只是想将相同的方法添加到多个类中 我有现有的类别NSManagedObject子类 Book Chapter Page 并且我想以干净且可维护的方
  • Java的全栈框架[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个完整的 Java 堆栈框架 从持久性到视图生成 CRUD 我没有使用 Rails 风格框
  • 模板中的类使用不完整

    我感到非常惊讶的是 在 g 的各种采样版本上 以下内容编译时没有错误或警告 Adapted from boost checked delete template
  • 什么是健全的编程语言?

    根据达特的网站 https www dartlang org guides language sound dart Dart 是一种声音语言 上面这句话中的 声音 是什么意思 我在其他主要编程语言中找不到任何类似的概念 谁能举出一些其他例子
  • 如何使用基于 XML 的 GUI 布局生成 python GUI?

    我在 Photoshop 中设计了一个自定义 UI 现在我想使用 XML 来创建 Python 的 GUI 我看到了这个网站http wiki xbmc org index php title WindowXML http wiki xbm
  • 与 Pandoc 一起使用的表布局

    我正在尝试创建文档生成工作流程 专业文档 目标是尽可能多地用 Markdown 编写 生成的文档应该是 PDF 同时仍然能够在必要时导出为 docx 我选择了 Pandoc 我将为其创建一个 Latex 模板并使用 YAML 文档来保存文档
  • 如何使用 NSURLConnection 下载文件?

    我想问一个关于目标 C 的问题 我想从 iPhone 应用程序中的服务器 CardDav 服务器 下载 vcf 文件 在我阅读了Apple Developer的API和库之后 我发现我应该使用NSURLConnection 类 http d
  • 使用Windows Auth对用户进行身份验证,然后在ASPNET Core 2.1中生成JWT

    我有一个 ASP NET Core 2 1 WebApi 我在其中实现了 JWT 身份验证 用户调用api authentication authenticate 在消息正文中传递他们的用户名 密码 并返回 JWT 然后他们使用该 JWT