2016-09-01 3 views
1

でSharePointの現在のユーザーのLoginNameにします私は2つのアプリがあります:ポータルWeb ASC#MVC

  1. Sharepointの2013
  2. MVCアプリケーション

私は、SharePointのシングルサインオンをしたい場合は、 MVCアプリケーションからsharepointにログインしている現在のユーザーを取得するにはどうすればよいですか?

情報が必要な場合があります

  • SharepointのログインをWindows認証
  • フロー使用:新しいに私のMVCアプリケーションを開くためのボタンがありますされているSharePointのWebで
    1. ユーザーログイン
    2. をタブ(URL別)

今のところ、私はREST APIメソッドを使用することのみを知っています。コードが存在します:

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(HostURL + "/_api/Web/CurrentUser?Select=id"); 
request.Method = "GET"; 
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 
request.UseDefaultCredentials = true; 
request.PreAuthenticate = true; 
request.Credentials = new NetworkCredential(UserName, Password, DomainName); 

私のコードでは、私はネットワーク資格情報で割り当てられたユーザーしか取得できません。 MVCアプリケーションからsharepointにログインしている現在のユーザーを取得するにはどうすればよいですか?

ユーザーLoginNameを取得できる限り、どの方法でも受け入れられます。どうすればいいのか教えてください。

は、私はこれをテストしていないが、これは正しい方向にあなたを置くかもしれないあなたに

答えて

0

これは技術的に不可能です。 MVCアプリケーションがProviderHostedAppでない場合、SharePointポータルにログインしているユーザーを取得できません。

あなたのアプリが共有ポイントソリューションであり、共有ポイントのコンテキストで実行されている場合にのみ、Sarelの回答が機能します。それ以外の場合は、現在の使用方法で新しいSPSiteオブジェクトまたはSPWebオブジェクトを作成することはできますが、それはMVCアプリケーションを実行または使用しているユーザーです。

更新

ユーザーはあなたがMVCアプリケーションのためのIISの設定はWindows認証とユーザー偽装に設定されていることを確実にするために持っているよりも、SharePointサイトのうち、ボタンのクリックで、あなたのアプリを開きます。

この場合、SharePointサイトを開き、リンクをクリックしてMVCアプリケーションを開くユーザーは同じユーザーです。次に、MVCアプリケーションでHTTPContextによって現在の使用を取得することができます。

System.Web.HttpContext.Current.User 
2

ありがとうございます。

using (SPSite site = new SPSite(SPContext.Current.Site.ID)){ 
using (SPWeb web = site.OpenWeb(SPContext.Current.Web.ID)) 
{ 
    string userName = web.CurrentUser.LoginName; 
}} 

希望するものがあります。

編集

using Microsoft.SharePoint.Client; 
using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Web;  
using System.Web.Mvc;  

namespace MVCApp.Controllers  
{  
    public class EmployeeController : Controller  
    {  
     [SharePointContextFilter]  
     public ActionResult Index()  
     {  
      User spUser = null;  

      var spContext = SharePointContextProvider.Current.GetSharePointContext(HttpContext);  

      using (var clientContext = spContext.CreateUserClientContextForSPHost())  
      {  
       if (clientContext != null)  
       {  
        spUser = clientContext.Web.CurrentUser;  

        clientContext.Load(spUser, user => user.Title);  

        clientContext.ExecuteQuery();  

        ViewBag.UserName = spUser.Title;  
       }  
      }  

      return View();  
     }  

    }  
} 

これは嵐が話していたホストプロバイダの詳細を説明願っています。

+0

urが@ Sarel-Louwに返信します。どこでクラスSPSite、SPWeb、およびSPContextを取得できますか? –

+0

こんにちは、 "Microsoft.SharePointを使用して;"使用することができます –

+0

誰かが私の答えを投票したら、私も同様に学ぶことができるように説明してください! –