2015-12-02 2 views
4

У меня есть приложение C#, которое проверяет подлинность в SharePoint Online с помощью веб-запросов. Он отлично работает для меня, но кто-то получает следующее сообщение об ошибке:Ошибка аутентификации SharePoint Online

<?xml version="1.0" encoding="utf-8" ?><S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wst="http://schemas.xmlsoap.org/ws/2005/02/trust" xmlns:psf="http://schemas.microsoft.com/Passport/SoapServices/SOAPFault"> 
    <S:Body> 
    <S:Fault> 
     <S:Code> 
     <S:Value>S:Sender</S:Value> 
     <S:Subcode> 
      <S:Value>wst:FailedAuthentication</S:Value> 
     </S:Subcode> 
     </S:Code> 
     <S:Reason> 
     <S:Text xml:lang="en-US">Authentication Failure</S:Text> 
     </S:Reason> 
     <S:Detail> 
     <psf:error> 
      <psf:value>0x80048821</psf:value> 
      <psf:internalerror> 
      <psf:code>0x80041034</psf:code> 
      <psf:text>The specified member name is either invalid or empty.&#x000D;&#x000A;</psf:text> 
      </psf:internalerror> 
     </psf:error> 
     </S:Detail> 
    </S:Fault> 
    </S:Body> 
</S:Envelope> 

Что означает эта ошибка? Я уверен, что они вводят правильное имя пользователя и пароль. Есть ли список кодов ошибок SharePoint Online, которые я могу найти где-нибудь, что поможет мне определить проблему?

Вот мой C# код:

var request = (HttpWebRequest)WebRequest.Create(@"https://login.microsoftonline.com/extSTS.srf"); 
request.AllowAutoRedirect = false; 
request.ContentType = @"application/json; odata=verbose"; 
request.CookieContainer = this.CookieContainer; 
request.Method = @"POST"; 
request.UserAgent = @"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"; 

string soapRequest = Strings.SharePointOnlineAuthenticationRequest 
    .Replace(@"$(UserName)", this.UserName) 
    .Replace(@"$(Password)", this.Password) 
    .Replace(@"$(Address)", this.SiteUrl); 
byte[] contentBytes = new ASCIIEncoding().GetBytes(soapRequest); 
request.ContentLength = contentBytes.Length; 
using (var requestStream = request.GetRequestStream()) 
{ 
    requestStream.Write(contentBytes, 0, contentBytes.Length); 
} 

Strings.SharePointOnlineAuthenticationRequest

Это запрос SOAP я посылаю. Атрибуты «$ UserName», «$ (Password)» и «$ (Address)» заменяются во время выполнения.

<value> 
    <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
    <s:Header> 
    <a:Action s:mustUnderstand="1=">http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue</a:Action> 
    <a:ReplyTo> 
    <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address> 
    </a:ReplyTo> 
    <a:To s:mustUnderstand="1=">https://login.microsoftonline.com/extSTS.srf</a:To> 
    <o:Security s:mustUnderstand="1=" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
    <o:UsernameToken> 
    <o:Username>$(UserName)</o:Username> 
    <o:Password>$(Password)</o:Password> 
    </o:UsernameToken> 
    </o:Security> 
    </s:Header> 
    <s:Body> 
    <t:RequestSecurityToken xmlns:t="http://schemas.xmlsoap.org/ws/2005/02/trust"> 
    <wsp:AppliesTo xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"> 
    <a:EndpointReference> 
    <a:Address>$(Address)</a:Address> 
    </a:EndpointReference> 
    </wsp:AppliesTo> 
    <t:KeyType>http://schemas.xmlsoap.org/ws/2005/05/identity/NoProofKey</t:KeyType> 
    <t:RequestType>http://schemas.xmlsoap.org/ws/2005/02/trust/Issue</t:RequestType> 
    <t:TokenType>urn:oasis:names:tc:SAML:1.0:assertion</t:TokenType> 
    </t:RequestSecurityToken> 
    </s:Body> 
    </s:Envelope> 
</value> 

ответ

Смежные вопросы