在WNetAddConnection2A上禁止使用SharePoint Online 403 [英] SharePoint Online 403 Forbidden on WNetAddConnection2A

查看:76
本文介绍了在WNetAddConnection2A上禁止使用SharePoint Online 403的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


我正在为客户开发一个小型实用工具。该工具允许用户连接到WPF应用程序中的SharePoint Online站点,并查看该站点上可用的库列表。然后,用户可以选择要在本地计算机上映射为网络驱动器
的库。 


我能够连接到站点并显示库列表,使用InternetSetCookie方法在本地计算机中设置身份验证cookie,并使用Windows API(mpr.dll,winnet.dll)中的WNetAddConnection2A方法创建网络驱动器。


它之前工作正常,但没有工作窗口10.现在它是不工作的任何机器,并返回<上;克类= QUOT; gr_ gr_872 GR-警报gr_gramm gr_inline_cards gr_run_anim语法仅插件doubleReplace replaceWithoutSep"数据-GR-ID =" 872"
id =" 872">错误< / g>代码为1244.使用fiddler我跟踪了获取cookie和WebDAV请求以映射网络驱动器的所有请求。 SharePoint返回403 禁止。


有人可以帮我解决这个问题吗?我正在寻找更好的方法来为此代码提供建议或解决方法。


下面是代码段:


  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;&NBSP;&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;&NBSP;&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;&NBSP;

  var i = 0;

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(authUtiltiy == null || cookies == null)

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; authUtiltiy = await RunAsync(webUri,userName,password,false,true);

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; cookies = authUtiltiy.cookieContainer.GetCookies(webUri);

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }


  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;如果(InternetSetCookie(的baseUrl,NULL,

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; string.Concat(饼干[" FedAuth"]。的ToString()," ;过期= QUOT ;,

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;饼干[" FedAuth"]。Expires.AddMinutes(0)的ToString ("R")))))
  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;如果(InternetSetCookie(的baseUrl,NULL,

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; string.Concat(饼干[" rtFA"]的ToString(。 ),英寸;过期= QUOT ;,

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;饼干[" rtFA"]。 Expires.AddMinutes(0).ToString(" R")))))
  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {

$


  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; i = Map(shareUrl,string.Format(" {0} {1}",lib.MapDrive.Drive,":"),userName,password);



  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(i> 0)

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; //抛出新的System.ComponentModel.Win32Exception(i);

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;否则

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; DbUtility.AddMappedInfo(新MappedInfo

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; {

&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; SITEURL =的baseUrl,

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; shareUrl = shareUrl,

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;驱动= lib.MapDrive.Drive.ToString(),

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;  Library = lib.Title

            });

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }


  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; return< g class =" gr_ gr_1275 gr-alert gr_tiny gr_spell gr_inline_cards gr_run_anim ContextualSpelling multiReplace"数据-GR-ID =" 1275" id =" 1275"> i< / g>;


谢谢。


最好的问候,


Silambarasan





silambarasan.P

解决方案
<跨度风格= "颜色:#1F497D">您好,


你能尝试比较一下这些饼干吗?使用SharePoint在线浏览器cookie从您的代码/解决方案生成以检查是否有任何区别。


最好的问候,


Lee


Hi,

I am developing a small utility tool for a customer. The tool allows the user to connect to a SharePoint Online site in a WPF App and see the list of libraries available on that site. Then the user can select libraries that they want to map as network drives on the local machine. 

I am able to connect to the Site and display list of libraries, setting Authentication cookies in local machine using InternetSetCookie method and creating a network drive using WNetAddConnection2A method from windows APIs (mpr.dll, winnet.dll).

It was working earlier and was not working on windows 10. Now it is not working on any machine and returns <g class="gr_ gr_872 gr-alert gr_gramm gr_inline_cards gr_run_anim Grammar only-ins doubleReplace replaceWithoutSep" data-gr-id="872" id="872">error</g> code as 1244. Using fiddler I traced all the requests to get the cookies and WebDAV request to map a network drive. SharePoint returns 403  forbidden.

Can someone please help me in resolving this issue? I am looking for a better way of doing it a suggestion or a fix for this code.

below is the code Snippet:

                                                      

 var i = 0;
            if (authUtiltiy == null || cookies == null)
            {
                authUtiltiy = await RunAsync(webUri, userName, password, false, true);
                cookies = authUtiltiy.cookieContainer.GetCookies(webUri);
            }

            if (InternetSetCookie(baseUrl, null,
                string.Concat(cookies["FedAuth"].ToString(), "; Expires = ",
                    cookies["FedAuth"].Expires.AddMinutes(0).ToString("R"))))
                if (InternetSetCookie(baseUrl, null,
                    string.Concat(cookies["rtFA"].ToString(), "; Expires = ",
                        cookies["rtFA"].Expires.AddMinutes(0).ToString("R"))))
                {


                        i = Map(shareUrl, string.Format("{0}{1}", lib.MapDrive.Drive, ":"), userName, password);

                    if (i > 0)
                    {
                        // throw new System.ComponentModel.Win32Exception(i);
                    }
                    else
                    {
                        DbUtility.AddMappedInfo(new MappedInfo
                        {
                            SiteUrl = baseUrl,
                            ShareUrl = shareUrl,
                            Drive = lib.MapDrive.Drive.ToString(),
                            Library = lib.Title
                        });
                    }
                }

            return <g class="gr_ gr_1275 gr-alert gr_tiny gr_spell gr_inline_cards gr_run_anim ContextualSpelling multiReplace" data-gr-id="1275" id="1275">i</g>;

Thank you.

Best Regards,

Silambarasan


silambarasan.P

解决方案

Hi,

Could you try to compare the cookies generated from your code/solution with SharePoint online browser cookies to check is there any difference.

Best Regards,

Lee


这篇关于在WNetAddConnection2A上禁止使用SharePoint Online 403的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆