Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 窗口身份验证时如何控制登录对话框?_C#_Authentication_Iis_Window_Webapi - Fatal编程技术网

C# 窗口身份验证时如何控制登录对话框?

C# 窗口身份验证时如何控制登录对话框?,c#,authentication,iis,window,webapi,C#,Authentication,Iis,Window,Webapi,工作流程如下所示 我将IIS中带有webapi的应用程序设置为窗口身份验证 使用ajax访问此webapi 弹出登录对话框(窗口系统对话框),我想请求IIS匿名,然后响应401错误到客户端,浏览器弹出对话框 我输入了正确的域帐户,它通过了IIS窗口身份验证 请求转到web API,我展开“AuthorizationFilterAttribute”以验证它是否具有指定的角色。但这个账户没有 a。如果我也回复为401状态。结果是登录失败 对话一次又一次弹出。但期望对话消失并转到错误页面。 B如果我用

工作流程如下所示

  • 我将IIS中带有webapi的应用程序设置为窗口身份验证
  • 使用ajax访问此webapi
  • 弹出登录对话框(窗口系统对话框),我想请求IIS匿名,然后响应401错误到客户端,浏览器弹出对话框
  • 我输入了正确的域帐户,它通过了IIS窗口身份验证
  • 请求转到web API,我展开“AuthorizationFilterAttribute”以验证它是否具有指定的角色。但这个账户没有

    a。如果我也回复为401状态。结果是登录失败 对话一次又一次弹出。但期望对话消失并转到错误页面。
    B如果我用一个错误回复它200状态 给客户端的消息。我无法再次弹出对话。我猜 它是由标题“Persistent Auth:true”引起的

  • 我从网上搜索,得到以下信息

    当满足以下两个条件时,浏览器会弹出登录提示:

    HTTP状态为4xx 响应中存在WWW身份验证标头

    因此,我尝试删除“WWW-Authenticate”,但从未成功。只要我设定

    “StatusCode=System.Net.HttpStatusCode.Unauthorized”对于“HttpResponseMessage”,客户端浏览器始终获取“WWW-Authenticate”。IIS中的窗口身份验证模块似乎涵盖了这些信息

    //responseMessage.Content.Headers.Remove(“WWW-Authenticate”); //responseMessage.Content.Headers.Remove(“持久身份验证”)

    所以,我的问题是

    如何删除“WWW身份验证”或“持久身份验证”? 或

    状态为200时如何弹出登录对话框? 谢谢


    乔伊

    事实上,我是按照你下面提到的那样做的

    HttpResponseMessage responseMessage = new HttpResponseMessage()
    {
          Content = new StringContent(JsonConvert.SerializeObject(message)),
          //StatusCode = System.Net.HttpStatusCode.Forbidden
          StatusCode = System.Net.HttpStatusCode.Unauthorized
    };
    
    但是有一个糟糕的用户实践。当它响应未经授权的客户端时。登录对话框将闪烁一次,然后再次显示登录对话框

    预期的结果是,输入用户帐户和密码并单击OK按钮,然后服务器端响应未经授权的客户端。然后,登录对话框消失,并显示错误页面,告诉用户并没有权限。单击登录按钮再次显示登录对话框

    以上是问题1

    问题2,如果我使用“禁止”而不是“未经授权”,那么我可以实现上述预期,但登录对话框将不再显示

    问题3,如果我输入了错误的帐户或密码,则其响应状态代码为0,并且登录对话框也无法再次显示。甚至我按f5刷新它。除非我关闭chrome并再次打开它

    嗯,窗口身份验证不容易使用

    谢谢