使用 Windows 身份验证对单个操作而不是整个应用程序进行身份验证

2024-01-30

我想在某个计算机上使用 Windows 集成身份验证进行身份验证单控制器动作而不是全局应用程序。我在网上和StackOverflow上阅读了很多文章,但没有找到答案。请注意,我正在 Web API 2.0 中进行开发,而不是 MVC。

也就是说,通常要在整个应用程序上启用 Windows 身份验证,您需要执行类似的操作Web API 文档描述 http://www.asp.net/web-api/overview/security/integrated-windows-authentication:

<system.web>
    <authentication mode="Windows" />
</system.web>

在幕后,我不确定这到底是做什么的,但我怀疑我可以通过实施在单个控制器操作上复制它身份验证过滤器 https://msdn.microsoft.com/en-us/library/system.web.http.filters.iauthenticationfilter.aspx as Web API 文档描述 http://www.asp.net/web-api/overview/security/authentication-filters。但是,我还没有找到结论性文章来解释如何针对 Windows 集成身份验证执行此操作。

我的目标示例:

归根结底,我希望我的单个 Web API 接受来自配置为在以下任一客户端场景中使用 Windows 身份验证的客户端的请求:

C#

var handler = new HttpClientHandler()
{
    UseDefaultCredentials = true
};

var client = new HttpClient(handler);

Browser

$.ajax({
    url: 'api/testauthentication',
    type: 'GET',
    dataType: 'json',
    xhrFields: {
        withCredentials: true
    }
})

Edit #1

值得注意的是,我想以编程方式完成上述操作,而不是通过 web.config、IIS 设置等配置文件。另外,我正在使用欧文主持 http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api我的服务器上的应用程序。


答案是基于这个MSDN 文章 https://msdn.microsoft.com/en-us/library/system.net.httplistener.authenticationschemeselectordelegate.

本质上,您可以定义一个自定义委托方法,该方法指定使用集成 Windows 身份验证对哪些请求进行身份验证。

builder以下代码中的IAppBuilder实例指的是OWIN自托管的“Startup”代码中使用的IAppBuilder实例。看OWIN自主办文章 http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api有关此相关主题的更多详细信息。

OwinHttpListener httpListener = (OwinHttpListener)builder.Properties[typeof(OwinHttpListener).FullName];
httpListener.Listener.AuthenticationSchemeSelectorDelegate = new AuthenticationSchemeSelector(DetermineAuthenticationScheme);

然后定义DetermineAuthenticationScheme委托方法类似如下:

AuthenticationSchemes DetermineAuthenticationScheme( HttpListenerRequest request )
{
    if ( request == null )
    {
        throw new ArgumentNullException( "request" );
    }

    if ( request.RawUrl.IndexOf( "v1/foo", StringComparison.OrdinalIgnoreCase ) >= 0 )
    {
        return AuthenticationSchemes.IntegratedWindowsAuthentication;
    }

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

使用 Windows 身份验证对单个操作而不是整个应用程序进行身份验证 的相关文章

随机推荐

  • PySimpleGUI 表元素。如何读取选定的行?

    我是 Python 的初学者 甚至是 PySimpleGui 的初学者 我非常喜欢使用它来创建带有 GU 界面的小型应用程序 我遇到的问题是关于表格元素的 到目前为止 我已成功使用 sqlite 数据库中的数据填充表元素 一旦表格准备好数据
  • 如何将 `git diff --color-words` 的输出转换为 HTML?

    对于处理以纯文本形式存储的散文文本 我真的很喜欢以下输出git diff color words 但我不喜欢它依赖于 ANSI 终端转义序列的方式 我希望获得可用于转换为 HTML 的输出 某种用户友好的原始字符显示 或生成有关两个文件之间
  • HTML5 可以通过其视频标签播放 .mpd Manifest 文件吗?

    我有一个 Movie Manifest mpd 文件 由 5 个 webm 视频流 由不同大小和 bps 组成 和 1 个音频文件组成 我要问的问题是 可以通过 简单 的HTML5视频标签来播放吗 我已经尝试过这个 但它不起作用
  • 随机卡牌生成

    我需要从数组中随机生成三张卡 我有 52 张卡名称的数组 从卡1到卡52 String rank new String 52 for int i 0 i
  • ARMv8 浮点输出内联汇编

    为了添加两个整数 我写 int sum asm volatile add 0 x3 x4 r sum 我怎样才能用两个浮动来做到这一点 我试过 float sum asm volatile fadd 0 s3 s4 r sum 但这给了我一
  • 如何创建读取 shebang 的 Sublime Text 3 构建系统

    如何在 Sublime Text 3 中创建构建系统 cmd 是否被替换为 shebang 如果存在 更具体地说 是否有办法更改 Python 构建系统以使用 shebang 中指定的 Python 版本 并在不存在 shebang 的情况
  • AngularJS:为什么 ng-model 值没有在范围变量中更新

    我正在使用 jquery timepicker 插件及其角度指令 当我从 javascript 重置范围值时 同时范围值不会更新 我尝试对 timepicker 指令文件进行更改 但没有成功 例子 选择开始时间 1 00AM 然后结束时间自
  • geom_text 适用于 R 中的直方图?

    想知道是否geom text效劳于hist 尝试了下面的代码 似乎没有效果 我只想在为每个直方图桶绘制每个条形时显示标签 属于特定直方图桶的元素数量 任何解决方案表示赞赏 谢谢 p lt hist df foo main title xla
  • 从存储为节点缓冲区的字节数组创建类型化数组

    从节点docs https nodejs org api buffer html buffer buf slice start end关于从缓冲区创建类型化数组 缓冲区的内存被解释为数组 而不是字节数组 那 是 new Uint32Arra
  • 后台进程重定向到 COPROC

    在下面的测试脚本中 我运行一个基本协进程 echo内置 在后台运行 附加其标准输出 bin bash TEST 1 coproc bin sleep 100 echo gt COPROC 1 该脚本总是失败 没有明显的原因 给出输出 tes
  • 如何确定 .Net DLL 是否用于 GUI 应用程序或 Web 服务?

    如何确定 Net DLL 是否在 Windows GUI 应用程序或 Web 服务中运行 我有一个低级类 在两个应用程序之间共享 并且需要在 Web 服务中使用它时禁用消息框 Windows 应用程序有超过 200 个解决方案 我无法重构现
  • 将 !important 应用于具有多个选项的字体系列

    如何将 important 应用于以下样式 font family Trebuchet MS Verdana Helvetica Sans Serif 我已经尝试过这个 但不起作用 font family Trebuchet MS Verd
  • Prolog 程序返回命题公式中的原子

    我是序言新手 正在尝试编写一个返回atoms在一个结构良好的命题公式中 例如查询ats and q imp or p q neg p As 应该返回 p q for As 下面是我的代码 它返回的公式为As 我不知道该怎么做才能拆分sing
  • IIS7 URL从根目录重定向到子目录[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在使用带有 IIS7 的 Windows Server 2008 我需要重定向访问的用户www mysite com to wwww
  • oracle中的触发器

    触发器可以增强或阻碍性能的条件是什么 何时使用系统中的触发器 何时不使用触发器 如何使用触发器来施加复杂的约束 执行触发器总是会产生一些开销 至少 您要为导致触发器触发的每一行执行从 SQL 引擎到 PL SQL 引擎的上下文转换 虽然触发
  • JavaFX ObservableList - 添加项目导致 ConcurrentModificationException

    我有一张桌子Albums用户可以过滤和排序 这是该表的样子 正如您所看到的 这些列是可排序的 并且顶部有一个文本框 当前正在过滤其中包含字符串 cu 的专辑 一切都很完美填充专辑列表后 但是 如果我在填充专辑列表时尝试排序或过滤 我会得到一
  • c++ 不合逻辑 >= 处理 vector.size() 时的比较很可能是由于 size_type 是无符号的

    在处理 vector size 又名 size type 时 我可以使用一些帮助来澄清这种奇怪的比较 vector
  • 如何更改 jqgrid 中弹出的列选择器中的列名称?

    我有一个两列标题 Phase1 和 Phase 2 图像 1 现在在列选择器窗口中显示列名称 图 2 Name 类别 子类别 类别 子类别 我想以不同的方式展示 Name 一等奖组 一期子类别 Ph2组 Ph2子类别 注意 根据我的要求不要
  • 何时在 Ruby 中使用“self”

    这个方法 def format stations and date from station titelize if from station respond to titleize to station titleize if to st
  • 使用 Windows 身份验证对单个操作而不是整个应用程序进行身份验证

    我想在某个计算机上使用 Windows 集成身份验证进行身份验证单控制器动作而不是全局应用程序 我在网上和StackOverflow上阅读了很多文章 但没有找到答案 请注意 我正在 Web API 2 0 中进行开发 而不是 MVC 也就是