【问题标题】:how to obtain WindowsIdentity from Negotiate HTTP header value如何从协商 HTTP 标头值中获取 WindowsIdentity
【发布时间】:2013-11-22 21:29:17
【问题描述】:

我正在努力保护一些 REST 服务,并且我希望支持 Windows 身份验证。当 HTTP 客户端未发送任何身份验证凭据时,我的服务会以未经授权的响应和 WWAuthenticate 值“协商”进行响应。这会提示浏览器弹出用户名和密码对话框。我输入我的 Windows 凭据,请求返回到我的服务。这次有一个带有协商方案的授权标头,它的值我认为是我的某种形式的 Windows 身份。如何获取此标头值并将其转换为 WindowsIdentity 对象(或其他让我知道经过身份验证的用户是谁的对象)?

编辑:我的逻辑实际上发生在 webapi 管道中更高的 http 处理程序中。

【问题讨论】:

    标签: rest asp.net-web-api http-headers windows-authentication


    【解决方案1】:

    控制器有一个用户属性,可用于获取名称:

    User.Identity.Name
    

    User.identity 是 System.Security.Principal.Identity。

    【讨论】:

    • 糟糕,抱歉,我忘记了我实际上是在管道中更高的 http 处理程序中执行此操作的。
    【解决方案2】:

    如果你使用的是 WebAPI2,你可以这样做

           request.GetRequestContext().Principal.Identity
    

    否则你可以从请求消息的属性字典中挖掘原理。

    【讨论】:

    • 我实际上是想自己解析协商令牌(我假设是通过与 AD 交谈?),而不是依赖 IIS 将其转换为我的身份。
    • @user2719430 您可以轻松访问消息处理程序中的身份验证标头。然后你可以自己设置Prinicpal。如果您设法自己进行 Windows 身份验证,我很乐意看到该代码。
    • 我自己执行 Windows 身份验证实际上是我在我的问题中试图要求的。我发现这方面可用的材料很少,但这可能是因为不知道要搜索什么。
    • @user2719430,你有没有解决这个问题?我对做同样的事情很感兴趣。
    • 我没有,关于此事的文档很少。
    猜你喜欢
    • 2015-04-01
    • 2010-12-31
    • 1970-01-01
    • 2016-12-23
    • 2014-07-25
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多