我正在为我的公司开发一个Angular JS SPA,它使用承载令牌来验证用户 . 使用ASP MCV作为后端,我已经设置了OWIN中间件来处理服务器上的承载令牌 . 我的目的是为Web应用程序的用户生成承载令牌以锁定暴露的API . 这里的复杂性是我需要根据AD用户的Doamain \ Username生成承载令牌,但是为了使承载令牌起作用,我无法启用Windows身份验证 . 登录不是一个选项,必须在用户的AD凭据上验证用户 .
So far what I have managed to achieve: 在禁用Windows身份验证并启用匿名身份验证的情况下,我已经获得了基于在标头中传递给它的持有者令牌来验证请求的API . 为此,我创建了一个虚拟用户 .
What I need to achieve: 为用户获取'DOMAIN\Username'形式的AD用户名,以便我可以基于此创建承载令牌 . (到目前为止,我只能启用Windows身份验证)
我遇到的问题是我无法启用Windows身份验证,否则当我在API上放置[Authorize]属性时,它将根据Windows身份验证进行验证,无论是否有效的承载令牌 .
您可能会认为我正在尝试做的事情毫无意义,因为我可以使用Windows身份验证,但我需要承载令牌,以便只能从我的SPA调用API以确保安全性 .
到目前为止,我设法通过在启用了Windows身份验证的不同Web项目中创建API来获取用户ID,但是,页面加载时间受到影响所以我想避免以这种方式获取用户ID .
1 回答
最终想出来,现在可以回答我自己的问题了 .
我已将 enabled 的Windows身份验证和用户模拟以及匿名身份验证设置为web.config中的 false .
然后在web.config中我在
configuration
节点内添加了以下代码这就是说,对于在位置路径中包含'API'的所有api调用(我的所有需要承载令牌认证的API都具有以'api'开头的路由前缀), disable windows身份验证和 enable 匿名身份验证 . 通过启用匿名身份验证,我允许承载令牌验证API调用,而不是让Windows身份验证最终说出来 .
当使用Windows身份验证查找用户ID时,必须调用没有以'api'开头的路由前缀的API,因此在我的情况下,我的'AuthenticateUser'api的路由前缀为
然后web.config不会禁用Windows身份验证,这使我能够获取当前用户的值
对于需要授权的所有其他API,请确保它们具有以“api”开头且使用
[Authorize]
属性的路由前缀 .EDIT 我应该指出,为了像我在web.config中那样启用/禁用匿名身份验证和Windows身份验证,您必须首先允许它们在IIS HostFile中被覆盖,否则它将无法工作 .