2013-08-06 11 views
5

まさに今、私は自分のWebサービスの認証を得たが、私はこのような、WebMethodの内部メソッドを呼び出し、これをやった:WebServiceのヘッダ認証が

[WebMethod] 
[SoapHeader("LoginSoapHeader")] 
public int findNumberByCPF(string cpf) 
     { 
      try 
      { 
       LoginAuthentication(); 
       var retRamal = DadosSmp_Manager.RetornaRamalPorCPF(cpf); 
       var searchContent= String.Format("CPF[{0}]", cpf); 
       DadosSmp_Manager.insertCallHistory(retRamal, searchContent); 

       return retRamal.Ramal; 
      } 
      catch (Exception ex) 
      { 
       Log.InsertQueueLog(Log.LogType.Error, ex); 
       throw getException(ex.TargetSite.Name, cpf); 
      } 
     } 

私はコールなし「LoginAuthenticationを(このWebMethod属性を認証するために、今したいです) "メソッドであり、コードの中にあるSOAP Header - SoapHeader(" LoginSoapHeader ")のみを使用します。

次に、私の質問は、WebMethodをヘッダーのみを使用して認証する方法です。

ありがとうございます。

+0

これは古いSOAPプロトコルを使用するために必要ですか? HTTPだけを使用する多くの選択肢があります。たとえば、スリムで柔軟性のあるWeb APIは、さまざまな認証シナリオを容易に実装できます([here](http://www.asp.net/web-api/overview/security)を参照)。 – Oleg

+0

本当に必要ではありませんが、私はSOAPを使ってこれを行う方法を学びたいと思います。 – guisantogui

+0

私の意見では、SOAPは死んでいます。だから私は、AUTOPISTの仕事に近いSOAPの学習と思う。あなたは純粋な教育目標に従っていますか、あるいはSOAPを使って実装しようとすると何か問題がありますか? – Oleg

答えて

11

Webサービスクライアントは、Webメソッドにアクセスする際にユーザー名とパスワードを提供する必要があります。

は、我々は、この使用してカスタムSOAPヘッダではないHTTPヘッダ

.NETフレームワークは、あなたがのSOAPHeaderクラスから派生させたカスタムSOAPヘッダを作成することができます達成しようとしているので、ユーザー名とパスワード

を追加したいです
using System.Web.Services.Protocols; 

public class AuthHeader : SoapHeader 
{ 
public string Username; 
public string Password; 
} 

[SoapHeader ("Authentication", Required=true)] 

が目含める方法に次の属性を追加するために我々が持っている私たちの新しいSOAPヘッダの使用を強制するには私たちは、石鹸を使用して認証する.cs

public AuthHeader Authentication; 


[SoapHeader ("Authentication", Required=true)] 
[WebMethod (Description="WebMethod authentication testing")] 
public string SensitiveData() 
{ 

//Do our authentication 
//this can be via a database or whatever 
if(Authentication.Username == "userName" && 
      Authentication.Password == "pwd") 
{ 
    //Do your thing 
    return ""; 

} 
else{ 
    //if authentication fails 
    return null; 
}    
} 

の電子クラス名:SOAPリクエストのヘッダ要素は、要求とともに送信されるHTTPヘッダを誤解しないでください。 SOAPリクエストは次のようになります:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
<soap:Header> 
    <AUTHHEADER xmlns="http://tempuri.org/"> 
    <USERNAME>string</USERNAME> 
    <PASSWORD>string</PASSWORD> 
    </AUTHHEADER> 
</soap:Header> 
    <soap:Body> 
    <SENSITIVEDATA xmlns="http://tempuri.org/" /> 
    </soap:Body> 
</soap:Envelope> 
+2

メンバシップを使用している場合は、次の行を使用してユーザーを検証します。Membership.ValidateUser(Authentication.Username、Authentication.Password) –

+0

@AtronSeige - はい! –

+0

@AtronSeige - あなたが私の答えが役に立つと思うなら...あなたは答えを見ている人が答えの使い勝手を知るように私の答えをupvoteすることができます。 –