SharePoint Provider Apps 高安全性为什么选择 Windows 身份验证



我已经设置了一个SharePoint开发环境,并设法让一个提供商托管的应用程序与Certs等一起工作(高安全性)

这都是本地的,我们不会连接到ACS(现在,我可能错过了理解的ACS,我认为它基于Azure,服务器需要与服务器机房:)之外的服务器通信)。

我的问题是:

SharePoint 站点将不会使用 Windows 身份验证,我们将使用登录表单,该表单将从另一个商店读取详细信息。

如果我查看VS生成的代码,我可以看到它需要一个Windows标识。

这能做到吗?我本来希望我的提供商应用程序不需要任何身份验证,因为它通过 SharePoint 托管,它从 SharePoint 获取声明,那么为什么它需要 Windows 标识以及 SharePoint 声明。

正如您所说:SharePoint网站将不会使用Windows身份验证,我们将使用登录表单,该表单将从另一个商店读取详细信息。

答:您正在谈论基于表单的身份验证。

如果我查看VS生成的代码,我可以看到它需要一个Windows标识。

答:你是对的。VS 生成需要 Windows 标识的代码 [对于开发环境]。您需要编写单独的函数来使用 SharePointContextProvider 类获取 FBA 的客户端上下文。

Context 可以是 :
CreateAppOnlyClientContextForSPHost(),CreateUserClientContextForSPHost()

我希望我的提供商应用程序不需要任何身份验证,因为它通过 SharePoint 托管

答:您可以使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();
}

最新更新