簡體   English   中英

Windows身份驗證的SharePoint自定義頁面發布表單

[英]SharePoint custom page post form with windows authentication

我是SharePoint的新手,當我向自托管的WCF端點提交自定義表單時,想了解如何獲取登錄的(Windows身份驗證)用戶詳細信息?

**HTML**    
<form action="/TestWCF/Submit" method="post">
      First name: <input type="text" name="fname"><br>
      Last name: <input type="text" name="lname"><br>
      <input type="submit" value="Submit">
    </form>

**WCF**
    public void Submit(User user)
    {

    }

呈現的SharePoint頁面是否存儲應隨我的自定義post方法一起傳遞的cookie? 因為如果它是一個asp.net網絡應用程序,我可以獲取存儲在客戶端中的令牌並將其發送到服務器並對其進行驗證。 但是SharePoint我沒有太多控制權。

用戶名是經過定制驗證的。 這是由FarmService程序集中的FarmService.Authentication.DistributorValidator類完成的。 此類從WCF類UserNamePasswordValidator繼承,並且重寫Validate方法。

public class DistributorValidator : UserNamePasswordValidator

{

public override void Validate(string userName, string password)

{

    if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(password))

        throw new SecurityTokenException("Username and password required");

    var repository = new DistributorRepository();

    if (! repository.IsKnownDistributor(userName, password))

        throw new FaultException(string.Format("Wrong username ({0}) or password ", userName));

}

}

除了一個絕對必要的細節。 為了使用戶名密碼身份驗證正常工作,托管服務的服務器需要X509證書。 否則,所有服務調用都會失敗。 該證書在服務行為中指定。

<serviceCertificate findValue="Farm" storeLocation="LocalMachine" storeName="TrustedPeople"  x509FindType="FindBySubjectName"/>

首先,您需要一個證書。 您可以創建自己的服務器,而不用購買一個服務器(該地址綁定到特定的服務器地址,因此對於測試目的毫無用處)。 .net框架附帶了生成這些工具的工具,並且有一些教程介紹如何使用這些工具。 通過自我證明的多元化視野工具,單擊幾次即可完成整個過程,變得更加容易。

他們在這里沒有告訴您,您必須以管理員身份運行該工具,否則它將很不正常地崩潰。 該工具還不清楚的是在何處存儲生成的證書。 默認情況下,它存儲在MyStore中。 驗證證書時,其可信度取決於其存儲位置。 當商店不受信任時,將啟動驗證鏈。 除了設置證書鏈之外,您還可以將證書直接存儲在受信任的存儲區中。

要使用此服務,請在客戶端中添加服務引用。 服務配置中的mexHttpBinding使無需任何憑據即可讀取服務中的所有元數據。

建立與客戶端的連接需要一些擺弄。 同樣,默認情況下並非所有這些設置都清除。

var endPoint = new EndpointAddress(new Uri(Farm.FarmUrl), EndpointIdentity.CreateDnsIdentity("Farm"));

var binding = new WSHttpBinding();

binding.Security.Mode = SecurityMode.Message;

binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName;
var result = new CustomerDeskOperationsClient(binding, endPoint);

result.ClientCredentials.UserName.UserName = Farm.FarmUserName;

result.ClientCredentials.UserName.Password = Farm.FarmPassword;

詳細信息可以參考帶有用戶名密碼身份驗證的簡單WCF服務。

希望有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM