2009-11-23 8 views
7

私はWindows Mobile 6携帯電話アプリケーションを作りたいと思っています。このアプリケーションは、私が作成したいWebサービスと対話します。Webサービスと携帯電話の認証方法

携帯電話のWebサービスやプログラミングアプリについてよく分かりませんので、いくつか質問があります。

  1. 認証方法を教えてください。私のユーザーが私のアプリを読み込んでログインページに行くのと同じように。彼らは資格情報を入力します。これはサーバーに送信され、認証されます。今私は何を返すのですか? FormsAuthenticationのいくつかの並べ替えはありますか?

  2. ログイン後、ログインしているかどうかチェックし続けなければなりませんか? asp.net mvcのように私はすべてのタグにAuthorizeAttributesを持っています。そうすれば、誰もそのアクションメソッドへのURLを入力してアクセスすることはできません。しかし、これはアプリケーションなので、ログインフォーム(最初のフォーム)に行ってからログインしなくても、メインフォーム(ログインフォームの後のフォーム)にアクセスできるかどうかわかりません。

  3. ウェブサービスには、asp.net mvcのような承認タグがありますか?私はおそらく、Webサービスのパスを自分のWebブラウザーに誰も型付けしないように、これらの行に沿って何かが必要なので、私が作成したすべてのメソッドにアクセスできます。

  4. 私はasp.net mvcアプリケーションを今作成しています。ユーザーが自分のサイトに資格情報を入力したときです。私は平文であると推測しているのですか?サーバーにハッシュしてチェックします。私はたぶん、ある日、SSLをより安全にするために余裕があると知っています。

私の質問は、電話機からサーバーに送信することで、私のウェブサイトのセキュリティよりも安全性が低くなりますか?ほぼ同じ?それをより安全にするために何ができるのですか(もうSSLですか?)。

おかげ

答えて

9

SOAPヘッダーを使用して、ユーザーの資格情報または認証トークンを渡すこともできます。あなたは、Webサービス

public AuthHeader AuthenticationInfo; 

上のパブリックプロパティを定義

using System.Web.Services.Protocols; 

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

といくつかの属性を追加:あなたはAuthentication for Web Services (using SOAP headers)上でこれを行う方法についての記事を見つけることができますが、要約するために、あなたは、ヘッダークラ​​スを作成します任意のWebメソッドに、あなたは認証されたユーザーにのみアクセスできるようにしたいと思います:

[SoapHeader ("AuthenticationInfo", Required=true)] 
[WebMethod] 
public string HelloSecretWorld() 
{ 
    if(!(AuthenticationInfo.UserName == "Hello" && AuthenticationInfo.UserName.Password == "World")) 
     throw new AuthenticationException(); 

    return "Hello World"; 
} 

クライアントコードは次のようになります。

MyWebService ws = new MyWebService(); 
ws.AuthenticationInfo = new AuthHeader {Username = "Hello", Password = "World"}; 
Console.Out.WriteLine(ws.HelloSecretWorld()); 

この方法では、認証の追加方法のシグネチャを変更する必要はありません。

+0

私はすべてのアクションで常に資格情報を送信する必要がありますか?私はあなたが新しいwebServiceObjectを作ったのを見ています。そう、私は私の電話アプリケーションで別のフォームに行って、新しいwebserviceオブジェクトを作ると言う。資格情報を再送信する必要がありますか? – chobo2

+0

資格情報ではなく、認証トークンのみを送信することもできます。この場合、まずWebサービスにトークンが(SOAPヘッダーまたは通常のWebメソッドのパラメータとして)資格情報を渡すように要求し、後で他のすべてのWebメソッド呼び出しに対して単一のプロパティ(トークン)を持つ別のSOAPヘッダーを使用します。この方法では、メソッド署名からセキュリティを保護しながら、他の呼び出しにSSLを使用する必要はありません。 –

+0

認証トークンとは何ですか?それをどのように生成するのですか?この認証にロールチェックを追加する場合はどうなりますか。 3つのロールがあり、いくつかのメソッドは特定のロールでしか使用できません。だから私はそれもチェックしなければならないだろう。 – chobo2

0

私は、Webサービスに手持ち(ウィンドウズモバイル)アプリケーションからの接続でこの問題に対処するために何回かありました。私が使用した解決策は、認証プロセスが成功したら、ユーザーのログイン名とIPアドレスのハッシュに基づいてCookieを作成することです。例えばユーザーIDとpwdは、サーバー上の永続的な資格情報と一致します。その後、このクッキーをクライアントに渡し、残りのセッションのすべてのWebサービス要求と一緒に渡します。例えばWebメソッドの最初のパラメータはクッキーです。

擬似コード:あなたはプレーンテキストでユーザーIDとPWDを渡す避けるために、SSLを使用したくないもちろん

string cookie = webServiceInstance.Authenticate("userName", "password"); 
double balance = webServiceInstance.GetBalance(cookie, someId); 

関連する問題