2009-08-30 21 views
0

フレックスアプリケーションをssl経由で実行し、他のセキュリティを実装することがベストプラクティスであることがわかっていますが、現時点ではオプションではありません。アプリは単にが必要ない私のスポンサーがそれを支払うことになる多くのセキュリティがそうでなければ)。しかし、私はセキュリティのいくつかのフォームを実装したいと思います、私はトランザクションを保護するSSLを持っていないときにも価値があるのか​​どうか疑問に思っています。sslが利用できない場合のFlexアプリケーションのセキュリティ

私の設定では、Flex UIを備えたASP.Netサーバー側があります。現在のところ、UIはサーバーへのアクセスを保護する唯一のものです。サーバーは各要求の間に何らかの種類の検証を行わず、その人がそれを行うことが許可されていると仮定します。明らかに誰でも投稿を生成するプログラムを書くことができます(たとえSSLを使うことができても、それはスイスのチーズのようになります)。私が前に言ったように、セキュリティは大きな問題ではない、これは内部アプリであり、何も重要ではないが、私は正しいことを信じている。セッションでユーザー情報を保持することは実行可能な選択肢となり、与えられたユーザーが許可を持っているかどうかなどを確認しますか?おそらく、ある種のトークンシステムですか?

この設定を保護するには、どのような方法が適していますか?

...といや、私はあなたにURLを与えることはありません:)

答えて

1

ASP。NETセッション自体は、トークンベースのセキュリティであるとはい、あなたは簡単に

[WebMethod(true)] 

を実行していることを実現することが可能とはい、任意のWebメソッドは、それがセッショントークンを検証User.IsAuthenticatedを呼び出す必要があり、最初に行われるログインが必要です。

簡単にフォーム認証を実装できます(web.configを空にして、FormsAuthenticationをコードで使用できます)。例えば

[WebMethod(true)] 
public string DoLogin(
    string username, 
    string password) 
{ 

    //.. do your verification 
    FormsAuthentication.SetAuthCookie(username,false); 
    return "Login Sucessful"; 
} 

[WebMethod(true)] 
public string ChangePassword(
    string oldPass, 
    string newPass) 
{ 
    // verify user is logged on or not.. 
    if(!User.IsAuthenticated) 
      return "Please Login"; 
    // The code below is secure, only 
    // authenticated user will go through below 
    // change pass... 


    return "Password Changed Successfully."; 
} 

は、我々は、多くのFlex + ASP.NETサイトを開発し、我々はまったく同じことをしましたが、代わりにリターンの「文字列」我々は通常

...次のようなクラスを返します
public class WSResult<T>{ 
    public bool Successful; 
    public string Message; 
    public T Result; 
    public T[] Results; 
} 

メソッドが成功した場合、Success = trueが返され、アイテムの配列を返すか単一のアイテムだけを返すかによって結果または結果が返されます。エラーまたは未定義のアクセスがあった場合は、Successful = falseを設定し、Messageを詳細な文字列として設定できます。次の例に従います。

[WebMethod(true)] 
public WSResult<BusinessUser> DoLogin(
    string username, 
    string password) 
{ 
    try{ 
     BusinessUser user = BusinessUser.GetByUsername(username); 
     if(user==null) 
      throw new Exception("User not found"); 
     if(user.Password != password) 
      throw new Exception("Password did not match"); 
     return new WSResult<BusinessUser>{ Result=user }; 
    }catch(Exception ex) 
    { 
     // this will even catch any DAL exceptions or any system error as well 
     // Log Exception... somewhere for tracking... 
     return new WSResult<BusinessUser>{ Successful=false, Message = ex.Message }; 
    } 
} 
+0

Akashに感謝します。オブジェクト直列化をどうやって処理しますか? –

+0

純粋なSOAP 1.2 XML Webサービスを使用しているため、すべてがxml形式で正しくシリアル化され、Flex BuilderではWSDLを簡単にインポートでき、型は正しくシリアル化されます。 WSResult は、フレックスでWSResultOfInt64としてシリアル化され、結果として生成されるタイプジェネリックも同様に出力できます。 XMLシリアライゼーションはコストがかかりませんが、ほとんどの場合、[XmlAttribute]を使用してネットワークトラフィックを削減しています。 –

+0

もう1つの点は、Http HandlersはJSON実装などを書くのに時間がかかり、大規模なプロジェクトでは時間がかかることです。それだけでなく、エラー処理はもう一つの痛みです。純粋なASP.NET SOAP Webサービスは非常に安定していて、より速く書くことができます。 –

1

を残念ながら、私はフレックスについてdiddlyスクワットを知っているが、私はとにかく助けることができると思います。私はあなたに2つの合理的に良い選択肢があると思う。

最初に、われわれは何かを明確にする必要があります。サーバがの承認を受けていないと言っていますか?少なくともユーザーを認証する機能はありますか?あなたはサーバーコードを自由にコントロールできますか?もしそうでなければ、私は次の提案が役に立つとは思わない。クライアント側のコードだけでサーバーを保護する方法がわかりません。多分方法がありますが、私はそれについて考えることはできません。

1)HTTPダイジェスト認証を使用します。これを行うには、サーバがそれを理解するように設定されていること、およびHTTP要求に適切な認証ヘッダを追加するためのflex apiのサポートが必要であることが必要です。サーバはパスワードでユーザを認証し、何らかの認証メカニズムに対して前記ユーザがどのような操作を実行できるかを確認することができる。

2)多くのアトム発行エンドポイントが使用する認証方式を実装するには、this articleのガイドラインに従ってください。フレックスAPIはこれをサポートする必要がありますが、既存のサードパーティ製のlibがあるかもしれません。 HTTPヘッダーにアクセスできる場合は、残りの部分を実装できるはずです。

幸運。

+0

偉大なリンク、ありがとう。あなたが最初に認証したのですが、当初はこれを書いて何も確認していないときに怠け者になってしまいました。 –

関連する問題