如何在 IAuthenticationFilter 实现中设置 WWW-Authentication 标头?

2024-01-21

我正在使用 MVC5 的 IAuthenticationFilter 接口实现基本身份验证。我的理解是,这是现在的首选方法,而不是使用 DelegatingHandler。我已经让它工作了,但是 www-authenticate 标头没有在响应中返回。这是我的 ChallengeAsync 实现:

public async Task ChallengeAsync(HttpAuthenticationChallengeContext context, CancellationToken cancellationToken)
    {
        var result = await context.Result.ExecuteAsync(cancellationToken);
        if (result.StatusCode == HttpStatusCode.Unauthorized)
        {
            result.Headers.WwwAuthenticate.Add(new AuthenticationHeaderValue("Basic", "realm=localhost"));
        }
    }

如果我在 AuthenticateAsync 中设置标头,则会返回该标头,但我认为我应该在 ChallengeAsync 中设置它。很难找到示例实现。


In ChallengeAsync, set context.Result到类型的实例IHttpActionResult,像这样。

public Task ChallengeAsync(HttpAuthenticationChallengeContext context,
                                  CancellationToken cancellationToken)
{
    context.Result = new ResultWithChallenge(context.Result);
    return Task.FromResult(0);
}

提供一个实现,就像这样。

public class ResultWithChallenge : IHttpActionResult
{
    private readonly IHttpActionResult next;

    public ResultWithChallenge(IHttpActionResult next)
    {
        this.next = next;
    }

    public async Task<HttpResponseMessage> ExecuteAsync(
                                CancellationToken cancellationToken)
    {
        var response = await next.ExecuteAsync(cancellationToken);
        if (response.StatusCode == HttpStatusCode.Unauthorized)
        {
            response.Headers.WwwAuthenticate.Add(
                   new AuthenticationHeaderValue("Basic", "realm=localhost"));
        }

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

如何在 IAuthenticationFilter 实现中设置 WWW-Authentication 标头? 的相关文章

  • C# 中直接从 URL 获取图像尺寸

    我正在尝试使用以下代码直接从网络上获取图片的尺寸 string image http www hephaestusproject com csharp3 png byte imageData new WebClient DownloadDa
  • 显示 div 内的用户名列表

    我是 jQuery 新手 在我的项目中 我创建了一个类User其中代码如下所示 static ConcurrentDictionary
  • 读取大文件并制作字典

    我有一个大文件 我需要读取它并从中制作字典 我希望这一切能够尽可能快 然而我的Python代码太慢了 这是一个显示问题的最小示例 首先制作一些假数据 paste lt seq 20000000 lt seq 2 20000001 gt la
  • 无需登录即可在 Intranet 上获取 Web 应用程序的域\用户名

    我的 Intranet 上有一个 Web 应用程序 VS 2005 有几个页面不需要用户登录应用程序 反馈和默认页面 我正在尝试获取要显示和 或发送反馈的域名和用户名 有没有一种方法可以在不需要用户登录的情况下执行此操作 我试过了this
  • 如何部署包含第三方 DLL 文件的 C# 应用程序?

    首先 我对部署了解不多 我希望我的问题有意义 我需要将 C 应用程序安装 部署到多个桌面 它需要一个第三方 DLL 文件 一个 C 库 lpsolve55 dll 对于那些感兴趣的人 它是一个免费的 MIP LP 求解器 请参阅 lpsol
  • 尽管浮点数相同,但它们并不相等? [复制]

    这个问题在这里已经有答案了 下面的程序输出This No is not same 当两个数字相同时为什么会这样做 void main float f 2 7 if f 2 7 printf This No is same else prin
  • 如何将 Visual-Studio 2010 切换到 c++11

    我是 c 编程新手 我想尝试 c 11 新功能 那么我要问的是如何切换 Visual studio 2010 才能编译 c 11 源代码 你可以参考这个表 VC10 中的 C 0x 核心语言功能 表格 http blogs msdn com
  • AcceptSocket 超时?

    是否有可能AcceptSocket on a TcpListener具有超时的对象 以便它偶尔被中断 TcpListener server new TcpListener localIP port server Start while sh
  • 多个线程访问一个变量

    我在正在读的一本教科书中发现了这个问题 下面也给出了解决方案 我无法理解最小值怎么可能是 2 为什么一个线程不能读取 0 而所有其他线程都执行并写入 1 而无论是1还是2 最后写入的线程仍然必须完成自己的循环 int n 0 int mai
  • 根据 Active Directory 策略检查密码[重复]

    这个问题在这里已经有答案了 我有一个允许用户更改其 AD 密码的前端 有没有办法获取特定用户及其属性 长度 复杂性 的密码策略 例如细粒度 有没有办法根据此特定策略检查字符串 xyz121 编辑 我不想检查活动目录中存储的当前密码 我想检查
  • 如何解决文件被另一个进程使用的问题?

    我一直在 VS NET 2010 中调试 没有任何问题 但现在无法建造 我收到错误 Unable to copy file filename to bin Debug filename The process cannot access t
  • 这些工作队列标志意味着什么?

    在研究工作队列时 我遇到了内核中定义的工作队列标志和常量 我有以下我无法理解的疑问 这里的排水和救援到底是什么意思 WQ DRAINING 1 lt lt 6 internal workqueue is draining WQ RESCUE
  • 禁用实体框架的默认值生成(Code First)

    我数据库中有一个列不能为空 我想将其设置为默认值在数据库中 问题是实体框架似乎自己创建了一个默认值 例如 int gt 0 并且完全忽略了数据库中的默认值约束 有没有办法禁用实体框架的默认值 我发现您可以使用以下属性来装饰您的字段 Data
  • 在 Windows 上使用 C/C++ 开发时省略 msvcr100.dll?

    是否可以在 Windows 上使用 C C 进行开发而不链接到 msvcr100 dll 我知道这是 Windows 的标准 c 库 但我想知道如果我没有安装 Visual Studio 或 Redistributable 软件包 我的计算
  • 如何在 ASP.NET Core 项目中使用 MStest 测试 Ok() 结果

    我正在使用 MStest 来测试我的控制器 我想测试这个动作 HttpGet Name GetGroups public async Task
  • 删除数组时出现访问冲突异常

    删除分配的内存时 出现 访问冲突读取位置 异常 如下所示 我有一个针对 Visual Studio 2010 工具集 v100 C 编译器编译的本机 dll 我有一个针对它的托管 dll 包装器 它是针对工具集 v90 编译的 因为我想以
  • 如何在 SQLite 中检查数据库是否存在 C#

    我目前正在用 C 编写一个应用程序 并使用 sqlite 作为嵌入式数据库 我的应用程序在启动时创建一个新数据库 但如何让它检查数据库是否存在 如果它确实存在 我如何让它使用它 如果不存在如何创建一个新数据库 这是我到目前为止所拥有的 pr
  • 检查另一种形式的线程是否仍在运行

    我有一个涉及两个窗体的 Windows 窗体应用程序 子表单用于将数据导出到 CSV 文件 并使用后台工作者写入文件 当这种情况发生时 我隐藏了表格 当后台工作程序运行时 父窗体仍然处于活动状态 因此即使后台工作程序正在写入文件 用户也可以
  • 使用方法的状态模式

    我正在尝试使用方法作为状态而不是类来基于状态模式的修改版本来实现一个简单的状态机 如下所示 private Action
  • 有没有办法在 C# 中仅通过文件名查找文件?

    我们现在使用绝对路径或相对路径在 C 应用程序中查找文件 如果文件位于当前工作目录下或 路径 之一下 有没有办法仅通过名称查找文件 使用绝对路径不好 使用相对路径也不够好 因为我们可能通过重命名或移动项目文件夹来更改项目结构 如果我们的代码

随机推荐

  • JSF 1.2 Action 和 ActionListener 中的异常之间的区别

    我注意到 JSF 1 2 当actionListener方法中抛出异常时不返回错误页面 但当action方法中抛出异常时返回错误页面 这是为什么 在这两种情况下它都能返回错误页面吗 任何抛出的异常FacesEvent http downlo
  • 仅 AJAX 访问

    我最近开始在 PHP 中编写大量支持 AJAX 的脚本 问题是 AJAX 调用访问的文件也可以直接使用 如何禁用它 您无法可靠地阻止这种情况的发生 真正的关键是不要将某人直接访问此文件视为安全问题 对此做好计划 您将处于一个更加安全的地方
  • 当传递到 ASP.NET Core 2.2 中的 [FromForm] 使用的模型时,GUID 列表为空

    EDIT 问题在于招摇 请参阅我自己的解决方法的答案 我目前在使用 HTTP POST 和将 GUID 列表传递给控制器 操作时遇到一些问题 FromForm 指南列表是空的 如果我尝试将其转换为字符串列表 则列表中只会显示 1 个值 而不
  • 导入自定义 npm 包会导致空/空对象

    我可以在同一个包中导入 MyComponent 并将其呈现在页面上 但无法链接或下载 MyComponent 包并导入该组件 包 json name my component version 1 0 0 main dist index js
  • 图像的 Blob URL

    我怎样才能 保存 这个图像 blob https 3A theta360 com 473c6400 b8e7 4c41 8f7a 90f03cbc8787 发现于 https theta360 com s lE2in9qQDK6j2CcjP
  • Java 语言规范 - 无法理解“BlockStatement”

    我一直在研究 Java 语言规范here http java sun com docs books jls second edition html syntax doc html 相反 我应该出去喝杯啤酒 并且我很好奇一个方法可以包含什么
  • 在 Qt、QtCreator 和 QMake 中配置 GCC 编译器开关

    我最近尝试使用Qt创建者 http en wikipedia org wiki Qt CreatorWindows 7 64 位 上的 1 3 2 Qt 4 6 2 和 GCC 4 4 0 32 位版本 使用一些实验性 C 0x 扩展来编译
  • 如何在heroku上部署夹层?

    我创建了一个夹层项目 其名称为 mezzanine heroku test 我创建了一个 Procfile 其内容如下 网络 python manage py run gunicorn b 0 0 0 0 PORT w 3 接下来 我访问网
  • JPQL 中的 LEFT JOIN ON()

    我有两个实体 User id long name String Player id long owner User 点 int 现在我想在一个 JPQL 查询中选择一个用户及其关联的玩家 在 SQL 中我会这样做 SELECT u p FR
  • 在使用 R 进行 PCA 分析之前省略 NA 和数据插补

    我正在尝试使用进行 PCA 分析princompR 中的函数 下面是示例代码 mydf lt data frame A c NA rnorm 10 4 5 B c NA rnorm 9 4 5 NA C c NA NA rnorm 8 4
  • Pyspark 根据另一个数据帧替换数组列上的值

    我有两个数据框 一个仅包含一些独特的数据框ids与相关的names像这样 Id name 0 name a 1 name b 2 name c 第二个数据帧包含存储在数组中的第一个数据帧的 id 每行 Row 1 row 2 0 0 2 1
  • Canvas绘制速度非常慢

    我想显示带有标记的比例尺 效果很好 最重要的是 我还想用红色指示器在刻度中显示鼠标位置 因此 我在运行应用程序时绘制画布 然后在更改鼠标位置时重新绘制整个画布 我是画布新手 不明白我的代码有什么问题 我一直在尝试解决它但没有运气 问题可能出
  • SwiftUI 可选环境对象

    我在用着 EnvironmentObject像这样 struct MyView View EnvironmentObject var object MyObject 但我的代码不需要有值object 仅将其设为可选是行不通的 甚至无法编译
  • 使用 RankNTypes 和 TypeFamilies 的非法多态或限定类型

    我一直在慢慢地致力于移植llvm https github com alphaHeavy llvm包使用数据类型 类型族和类型 nats 并在尝试删除用于对值进行分类的两种新类型时遇到了一个小问题 ConstValue and Value
  • 进程的开始时间

    如何使用 C 代码检索进程的启动时间 如果可能的话 我还想知道如何使用 Widows 内置的功能来做到这一点 public DateTime GetProcessStartTime string processName Process p
  • 在数据库表中存储整数或字符串之间的区别

    我关心性能 工程和可读性 假设我有一个博客 每个帖子都有其状态 已发布 4 待审核 2 草稿 1 建议将这些信息存储在什么位置status column status lt storing status as string pending
  • URI 模板可以用于将 URI 与路由匹配吗?

    ASP NET 或 Nancy 等框架提供了可用于指定路由的语法 例如 MapRoute customers id invoices invoiceId 在 ASP NET 中 路由有两个方向 他们能match请求 URI 例如 custo
  • Spring 的 AspectJ 模式缓存与 AspectJ 模式事务

    我的问题与 Spring 的 AspectJ 模式有关 特别是如何启用它 交易管理 Caching 1 我注意到 为了启用AspectJ模式进行事务管理 我只需要执行以下操作 Configuration EnableTransactionM
  • Spring JPA 存储库忽略 FetchType.LAZY

    我有我的实体类OneToMany定义的映射和通过扩展创建的 Spring JPA 存储库接口JpaRepository弹簧接口 我已将 fetch 设置为FetchType LAZY明确地在关联OneToMany注解 我面临的问题是 当我使
  • 如何在 IAuthenticationFilter 实现中设置 WWW-Authentication 标头?

    我正在使用 MVC5 的 IAuthenticationFilter 接口实现基本身份验证 我的理解是 这是现在的首选方法 而不是使用 DelegatingHandler 我已经让它工作了 但是 www authenticate 标头没有在