2013-08-07 1 views
2

현재 SharePoint Authentication.asmx를 사용하여 C# 응용 프로그램 내에서 인증 세션을 만듭니다. 이 모든 작업을 예상하고 내가 업로드 할 수있는 파일 등입니다공유 URL에 응용 프로그램 - 공유 인증 세션

나는 또한 사용하여 내 응용 프로그램 내에서 내 SharePoint 사이트에 대한 링크가 :

내가 가진 문제는 내 사용자가에서 로그인하라는 메시지가 있다는 것입니다
Process.Start("**/documents/Forms/***"); //URL modified for StackOverflow 

브라우저에서 내 응용 프로그램과 함께 버튼을 클릭하면 브라우저에 세션이 없기 때문에 이해할 수 있습니다. 내 앱에서 브라우저와 공유하는 세션을 공유 할 수있는 방법이 있습니까? 당신이 당신의 문제를 해결할 수있는 방법에 따라 브라우저 객체를 유지할 수있는 경우

using (SPAuth.Authentication authSvc = new SPAuth.Authentication()) 
    { 
     authSvc.Url = @"***/_vti_bin/Authentication.asmx"; //URL modified for StackOverflow 
     authSvc.CookieContainer = new System.Net.CookieContainer();  

     //set the FBA login information 
     SPAuth.LoginResult result = authSvc.Login(username, password); 

     if (result.ErrorCode == SPAuth.LoginErrorCode.NoError) 
     { 
      try 
      { 
       ... 
      } 
      catch 
      { 
       ... 
      } 
     } 
    } 

답변

0

:

내가 인증을 사용하고있는 코드입니다.

public void AuthenticateInSharePoint(String url, String login, String password) 
    { 
     try 
     { 
      var uri = new Uri(url); 
      var uriBuilder = new UriBuilder(); 
      uriBuilder.Scheme = uri.Scheme; 
      uriBuilder.Port = uri.Port; 
      uriBuilder.Host = uri.Host; 
      uriBuilder.Path = "_forms/default.aspx"; 
      uriBuilder.Query = String.Format("ReturnUrl={0}", HttpUtility.UrlEncode(uri.LocalPath)); 

      var request = (HttpWebRequest)HttpWebRequest.Create(uriBuilder.ToString()); 
      request.ContentType = "application/x-www-form-urlencoded"; 
      request.AllowAutoRedirect = true; 
      var response = (HttpWebResponse)request.GetResponse(); 

      using (var reader = new StreamReader(response.GetResponseStream())) 
      { 
       var html = reader.ReadToEnd(); 

       var doc = new HtmlDocument(); 
       doc.LoadHtml(html); 

       foreach (var node in doc.DocumentNode.Descendants("script").ToList()) 
        node.Remove(); 

       foreach (var node in doc.DocumentNode.Descendants("link").ToList()) 
        node.Remove(); 

       var form = doc.DocumentNode.Descendants("form").FirstOrDefault(); 
       if (form != null) 
       { 
        form.Attributes["action"].Value = uriBuilder.ToString(); 

        var script = doc.CreateElement("script"); 
        script.InnerHtml = String.Format(@" 
         var input = document.createElement('input'); 
         input.setAttribute('type', 'hidden'); 
         input.setAttribute('name', 'ctl00$PlaceHolderMain$signInControl$login'); 
         input.value = 'Sign In'; 
         document.forms[0].appendChild(input); 

         document.getElementById('ctl00_PlaceHolderMain_signInControl_UserName').value=""{0}""; 
         document.getElementById('ctl00_PlaceHolderMain_signInControl_password').value=""{1}""; 
         document.forms[0].submit();", login, password); 

        var body = doc.DocumentNode.Descendants("body").FirstOrDefault(); 
        if (body != null) 
         body.AppendChild(script); 
       } 

       var builder = new StringBuilder(); 
       using (var writer = new StringWriter(builder)) 
        doc.Save(writer); 

       return Content(builder.ToString(), response.ContentType); 
      } 
     } 
     catch (Exception e) 
     { 
      Log.Error(e, "Failed to authenticate user in SharePoint."); 
     } 

    }