我已经设置了一个SharePoint开发环境并设法让一个提供商托管的应用程序与Certs等一起工作(高安全性)
这都是内部部署,我们将不会与ACS建立连接(现在,我可能已经错过了解ACS,我认为它基于Azure,服务器需要与服务器机房之外的服务器通信:))。
我的问题是:
SharePoint网站将不会使用Windows身份验证,我们将使用登录表单来读取其他商店的详细信息。
如果我查看VS生成的代码,我可以看到它需要Windows身份。
可以这样做吗?我原本期望我的提供商应用程序不需要任何auth作为其通过SharePoint托管,它从SharePoint获得声明,所以它为什么需要Windows身份以及SharePoint声明。
答案 0 :(得分:0)
正如您所说:SharePoint网站将不会使用Windows身份验证,我们将使用登录表单来读取其他商店的详细信息。
Ans:您正在谈论基于表单的身份验证。
如果我查看VS生成的代码,我可以看到它需要Windows身份。
答:你是对的。 VS生成需要Windows标识的代码[适用于开发环境]。您需要编写单独的函数以使用SharePointContextProvider类获取FBA的clientcontext 上下文可以是:我原本希望我的提供商应用程序不需要任何auth作为其托管的SharePoint
Ans:您可以将IIS网站[托管您的提供商托管应用程序]设置为允许匿名身份验证。
您可以使用此代码获取访问令牌。
var contextTokenString = TokenHelper.GetContextTokenFromRequest(Page.Request);
var appWeb = new Uri(clientContext.Web.Url);
if (contextTokenString != null)
{
SharePointContextToken contextToken =
TokenHelper.ReadAndValidateContextToken(contextTokenString, Request.Url.Authority);
string accessToken =
TokenHelper.GetAccessToken(contextToken, appWeb.Authority).AccessToken;
}
获取当前用户: -
// Get current context to get load siteurl
var spContext = SharePointContextProvider.Current.GetSharePointContext(HttpContext);
string webUrl =spContext.SPHostUrl.ToString();
//using (var clientContext = spContext.CreateUserClientContextForSPHost())
using (ClientContext clientContext = new ClientContext(webUrl))
{
clientContext.AuthenticationMode = ClientAuthenticationMode.FormsAuthentication;
clientContext.FormsAuthenticationLoginInfo = new FormsAuthenticationLoginInfo(uName, pswd);
Web web = clientContext.Web;
clientContext.Load(web);
clientContext.ExecuteQuery();
// Load SP user from login name found from httpcontext
string currentSPUser = string.Concat("<<<FBADomainPrefix>>>",User.Identity.Name);
var currentUser = clientContext.Web.EnsureUser(currentSPUser);
clientContext.Load(currentUser);
clientContext.ExecuteQuery();
}