用户在使用IE时获得授权,但未使用Chrome / Firefox

时间:2015-06-05 08:13:46

标签: angularjs authentication asp.net-web-api authorization claims-based-identity

我有一个需要与服务通信的AngularJS应用程序。该服务未设置为接收CORS请求,因此我有一个ASP.NET WebAPI代理,它接收来自AngularJS应用程序的请求,然后调用该服务。

使用Windows身份验证。凭据传递方式如下:

$http({
    method: 'POST',
    url: 'api/Query/',
    data: data,
    withCredentials: true
 })
 .success(function (response) {
     args.success(response);
 })
 .error(function (data, status, headers, config) {
     args.error(data.Message);
 });

然后,WebAPI服务模拟主体,调用服务并返回数据:

[Authorize]
public class QueryController : ApiController
{
    [Log]
    [HttpPost]
    public HttpResponseMessage Post([FromBody]object data)
    {
        var url= ConfigurationManager.AppSettings["URL"];
        var windowsIdentity = (WindowsIdentity)HttpContext.Current.User.Identity;

        using (windowsIdentity.Impersonate())
        {
            var searializedData = JsonConvert.SerializeObject(data);

            using (var client = new WebClient { UseDefaultCredentials = true })
            {
                client.Headers.Add(HttpRequestHeader.ContentType, "application/json; charset=utf-8");
                var responseBytes = client.UploadData(url, "POST", Encoding.UTF8.GetBytes(searializedData));

                return new HttpResponseMessage
                {
                    StatusCode = HttpStatusCode.OK,
                    Content = new ByteArrayContent(responseBytes)
                };
            }
        }
    }
}

终端服务对我来说有点黑盒子 - 我不完全了解并无法控制那里发生的事情。

现在,当我从IE拨打电话时,它会成功通话。当我从Chrome拨打电话时,它成功调用了WebAPI,但是在WebAPI中,当它到达client.Upload(...)行时,终端服务会响应401 Unauthorized响应。

如果我在通话中设置断点并在IE或Chrome通话中检查windowsIdentity,则会设置IsAuthenticated标志,AuthenticationType为' Negotiate'并且身份名称是我的登录名,完全符合预期。

有一点不同的是索赔,尤其是群组。进行Chrome通话时,会包含以下群组:

S-1-5-1139721481-3647981065-3646938227-513
S-1-1-0
S-1-5-32-545
S-1-5-2
S-1-5-11
S-1-5-15

当我进行IE调用时,会提供以下内容:

S-1-5-1139721481-3647981065-3646938227-513
S-1-1-0
S-1-5-32-545
S-1-5-11
S-1-5-15
S-1-5-4
S-1-2-1
S-1-2-0

事实上,任何成功的电话往往会有最后3个电话,未经授权的电话也不会。这些显然具有以下含义:

SID:S-1-5-4 名称:互动 描述:包含以交互方式登录的所有用户的组。成员资格由操作系统控制。

SID:S-1-2-0 名称:本地 描述:包含已在本地登录的所有用户的组。

SID:S-1-2-1 名称:控制台登录 描述:包含登录到物理控制台的用户的组。

我已尝试过不同的身份验证提供程序,但这并没有什么不同。

这里发生了什么以及如何防止它?

0 个答案:

没有答案