具有客户端证书身份验证的.Net Core Web API

2023-12-30

我在.Net Core 2.1中开发了一个简单的WEB API服务

我正在尝试实现客户端证书身份验证,因此我只能向在其计算机上安装了特定证书的客户端授予对 API 的访问权限。

客户端使用浏览器(Chrome、Edge、IE11 或 Firefox)访问 API。

我在 API 方法中添加了证书请求:

[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{

    X509Certificate2 cert = Request.HttpContext.Connection.ClientCertificate;
    if (cert!=null && cert.Verify())
    {
        //more verification here...
        return Content("....", "application/json");
    }
    else
    {
        return Content("....", "application/json");
    }

}

然后我安装了自签名证书并将其添加到受信任的根,从而实现客户端身份验证目的。

但变量cert始终为空,当我请求该页面时,浏览器甚至没有提示我使用证书。

我想是因为我必须在某个地方设置 Web 服务器必须要求提供客户端证书,因为可以在 IIS 中设置,但在我的开发环境中,我使用的是 IIS Express。

如何强制 IIS Express 请求客户端证书?


要使用 ASP.NET Core 身份验证堆栈进行正确的证书身份验证,您还可以查看idunno.身份验证.证书 https://www.nuget.org/packages/idunno.Authentication.Certificate by 巴里·多兰斯 https://twitter.com/blowdart他自己。它允许您为应用程序启用证书身份验证,并像任何其他身份验证方案一样处理它,因此您可以将实际的基于证书的逻辑保留在业务逻辑之外。

这个项目有点包含一个实现证书认证 https://www.rfc-editor.org/rfc/rfc5246#section-7.4.4对于 ASP.NET Core。证书身份验证发生在 TLS 级别,早在它到达 ASP.NET Core 之前,因此,更准确地说,这是一个验证证书的身份验证处理程序,然后为您提供一个事件,您可以在其中将该证书解析为 ClaimsPrincipal。

你必须配置你的主机 https://github.com/blowdart/idunno.Authentication/blob/master/src/idunno.Authentication.Certificate/README.md#hostConfiguration用于证书身份验证,无论是 IIS、Kestrel、Azure Web 应用程序还是您正在使用的任何其他内容。

请务必查看“文档” https://github.com/blowdart/idunno.Authentication/blob/master/src/idunno.Authentication.Certificate/README.md关于如何正确设置它,因为它需要主机的配置 https://github.com/blowdart/idunno.Authentication/blob/master/src/idunno.Authentication.Certificate/README.md#configuring-your-host-to-require-certificates正常工作,就像使用 IIS Express 一样。其中包括针对其他服务器(例如原始 Kestrel、IIS、Azure 或一般反向代理)的说明。

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

具有客户端证书身份验证的.Net Core Web API 的相关文章

随机推荐

  • 快速识别语音到文本

    是否可以识别语音 然后使用自定义键盘将其转换为文本 就像 iPhone 中默认的消息应用程序一样 截屏 1 默认识别iPhone键盘中的语音 截屏 https i stack imgur com dyFuU png 2 语音转文字 截屏 h
  • getSymbols 仍然可以与 oanda 一起使用吗?

    我想获取货币和金属的数据 当我尝试一些软件包时 很多人建议使用 Quantmod 所以我用了getSymbols如下 getSymbols USD EUR src oanda Error in download file paste oan
  • webview中的iOS键盘样式?

    我对 Web 开发非常陌生 我的项目使用 Jquery mobile Phonegap 和 compass scss 默认情况下 当输入字段获得焦点时显示的键盘是一个包含具有字段导航功能的顶部栏的键盘 我想摆脱这个导航栏 并显示 iOS 中
  • <:< 运算符在 Scala 中如何工作?

    在Scala中有一个类 lt lt 见证了类型约束 从Predef scala sealed abstract class lt lt From To extends From gt To with Serializable private
  • 加载并解析存储在文件中的 HTTP 响应

    我有一个本地存储的文件 其中包含 http 请求的响应 它看起来像这样 HTTP 1 1 200 OK Accept Ranges bytes Access Control Allow Credentials true Access Con
  • 我是否必须在 Vue 3 中使用 Composition API,或者我仍然可以用“Vue 2”方式做事吗?

    是否可以安装 Vue 3 但仍以 Vue 2 方式执行操作 换句话说 我看到 Vue 3 具有新的 Composition API 但这是可选的还是 Vue 3 中必需的处理方式 出于某种原因 我认为 Vue 3 仍然允许您以 Vue 2
  • Python:PIL 替换单一 RGBA 颜色

    我已经看过这个问题了 所以问题 https stackoverflow com questions 1616767 pil best way to replace color并且似乎已经实现了一种非常相似的技术来替换单一颜色 包括 alph
  • 在 JS 中调用函数时省略/跳过具有默认值的参数

    在Python中 我们可以在函数调用中省略带有默认值的参数 例如 def post url params body print print url print params print body post http localhost us
  • nrepl.el:如何将 clojure 缓冲区形式评估为 nrepl 缓冲区而不是回显区域?

    我正在使用 git 中的 nrepl el 0 1 6 preview 通过 el get Recipe 并且我希望 clojure 缓冲区评估 C x C e C M x C c C r 分别表示表单 顶级表单和区域 以将它们自己发送到
  • arraylist 与数组中基本类型的包装

    在 Core java 1 中我读过 注意 ArrayList 很远 比 int 数组效率低 因为每个值都是单独的 包裹在物体内部 你会 只想将此构造用于 程序员时的小收藏 方便比方便更重要 效率 但在我的软件中 由于某些要求 我已经使用了
  • PHP 中变量名前的“At”符号:@$_POST

    我见过函数调用前面有一个 at 符号来关闭警告 今天我浏览了一些代码 发现了这一点 hn POST hn 放在这里有什么好处呢 The 是PHP中的错误抑制运算符 PHP支持一个错误控制 操作员 AT标志 什么时候 备用到php中的表达 可
  • Eclipse 调试:保持在当前项目的范围内

    在 Eclipse 中进行单步调试时 是否可以指示调试器仅遍历项目源中的步骤 我正在调试 Rails 应用程序 大部分调用都通过 Rails 的基础设施 例如 activerecord 进行传输 我对此不感兴趣 我希望步进调试器跳过这些文件
  • 如何让 Ansible 仅在一台主机上运行一项特定任务?

    该剧本如下所示 hosts all tasks name run on all hosts 1 shell something1 name run on all hosts 2 shell something2 name run on on
  • 设置 Sinatra 在子目录中运行

    现在我对 Sinatra Ruby Apache 还很陌生 但继承了一个 Sinatra 应用程序来部署 目前 Apache 设置为从文档根 httpdocs 运行 我需要在文件夹子目录下运行 ruby 应用程序 例如 httpdocs w
  • 如何使本地的mySQL数据库可以从不同的机器访问?

    我在 Windows 系统上安装了 mySQL 并使用 mySQL 查询浏览器进行连接 我正在提供培训 我希望人们能够连接到我的机器 SQL 数据库 我怎么做 目前它不允许连接 我需要修改哪些设置 第 1 步 检查 IP 连接 默认情况下
  • 如何将 python Reportlab 表定位在位置 10,100 并使用drawString

    我是一个Python爱好者和reportlab新手 我知道如何使用drawString将文本放置在页面上的特定位置 例如 c drawString 10 100 欢迎来到Reportlab 但我不知道如何放置一个表格 只有几行长 以便该表格
  • 当值可以是对象或空数组时反序列化 JSON

    我正在使用 VK API 有时服务器可以返回空数组而不是对象 例如 personal when it is empty or personal religion smoking 1 alcohol 4 when not empty 我正在使
  • 如何在 Swift 中的 UI 选项卡栏上应用渐变?

    我通过故事板构建了选项卡栏 并自定义颜色 我在应用程序委托中更改它 使用UITabBar appearance barTintColor Color 我有一个梯度方法是这样的 func setGradientBackground color
  • Gerrit - Gitlab 集成

    为了改进开发流程 我们组织决定在开发工作流程中引入 Gerrit 我是负责实施 Gerrit 服务器的人 互联网上提供的用户指南对于将 Gerrit 实施到我们现有的工作流程非常有帮助 我们使用 Jenkins 和 Sonar 作为非交互式
  • 具有客户端证书身份验证的.Net Core Web API

    我在 Net Core 2 1中开发了一个简单的WEB API服务 我正在尝试实现客户端证书身份验证 因此我只能向在其计算机上安装了特定证书的客户端授予对 API 的访问权限 客户端使用浏览器 Chrome Edge IE11 或 Fire