0

我正致力于保护一些REST服务,并且我想支持Windows身份验证。当HTTP客户端没有发送认证凭证时,我的服务响应一个未经授权的响应和一个WWAuthenticate值'Negotiate'。这会提示浏览器弹出用户名和密码对话框。我输入我的Windows凭据,然后请求返回到我的服务。这次有一个协商方案的授权标题,其中有一个我认为是我的Windows标识的某种形式的值。我如何获取这个标头值并将其转换成一个WindowsIdentity对象(或者让我知道经过身份验证的用户是谁的其他对象)?如何从Negotiate HTTP标头值获取WindowsIdentity

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

回答

0

控制器具有一个用户属性,它可以被用来获取名称:

User.Identity.Name 

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

+0

哎呀,对不起,我忘了我实际上正在做一个http处理程序中更高级的管道。 – user2719430

0

如果您正在使用WebAPI2你可以做

 request.GetRequestContext().Principal.Identity 

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

+0

我实际上是想自己解析谈判令牌(我通过与AD交谈来假设),而不是依靠IIS将它翻译成我的身份。 – user2719430

+0

@ user2719430您可以轻松访问消息处理程序中的auth头文件。然后你可以自己设置Prinicpal。如果您设法自己进行Windows身份验证,我很乐意看到该代码。 –

+0

执行Windows验证自己实际上是我想要问的问题。我发现可用的材料很少,但可能是不知道要搜索什么的结果。 – user2719430