1

n層のSilverlightアプリケーションをWindowsAzureに移行していますが、壁にぶつかりました。ログインすると、Webサービスは誰が認証されているかを知ることができません。私のクラウドプロジェクトには2つの役割があります。

  • Web UI:Azureでは、そのIPは111.222.33.44:80です。
  • Webサービス:Azureでは、そのIPは111.222.33.44:8080です。

Web UIの構成:

<system.web>
    <compilation debug="true" targetFramework="4.0" />
    <authentication mode="Forms">
        <forms name="COOKIENAME" loginUrl="~/Login/login.aspx" timeout="2880" />
    </authentication>
    <authorization>
        <deny users="?" />
    </authorization>
    <machineKey validation="SHA1" decryption="AES" validationKey="VKEY" decryptionKey="DKEY"></machineKey>
    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" />
</system.web>

Webサービスの構成

<system.web>
    <authentication mode="Forms">
        <forms name="COOKIENAME" loginUrl="~/Login/login.aspx" timeout="2880" />
    </authentication>
    <authorization>
    <deny users="?" />
    </authorization>
    <machineKey validation="SHA1" decryption="AES" validationKey="VKEY" decryptionKey="DKEY"></machineKey>
</system.web>

Web UIロールでは、Login/login.aspxがユーザー名とパスワードを送信します。クッキーはメソッドで作成されFormsAuthentication.SetAuthCookie(username, myVar);ます。Default.aspx次に、 Silverlightアプリケーションが含まれている場所にユーザーがリダイレクトされます。

起動時に、Silverlightアプリケーションは、を返すことにより、Webサービスロールからユーザー名を取得しますHttpContext.Current.User.Identity.Name

ローカルクラウドエミュレーターではすべて問題ありませんが、プロジェクトをWindows Azure(ステージング)にデプロイすると、Webサービスは接続されていることを認識しません。Fiddlerを使用したところ、111.222.33.44:8080 / Login / login.aspxページが照会されているのがわかりました(このページはWebサービスロールに存在しません。ユーザーが認証されているかどうかを知る方法です)。

Web UIロールによって作成されたCookieを取得できないため、Webサービスはユーザー名を取得できないと思われます。それを実際に機能させることは可能ですか、それともWebサービスの役割をWeb UIの役割とマージする必要がありますか?

両方の役割のマシンキーは同じです。

4

1 に答える 1

0

AFAIK2つの役割はCookieを共有しません。

同様の状況で、SilverlightクライアントをホストするWebプロジェクトと、Silverlightアプリで使用されるWebサービスがありました。

ユーザーはWebサイトにログインし、silverightクライアントにアクセスします。クライアントには、param属性を使用してWebサービス認証トークンが提供されていました

<object data="data:application/x-silverlight-2," type="application/x-silverlight-2">                
   <param name="Token" value="<%=Token %>" />

トークンは、Webサービスによって復号化されると、ログインしたユーザーのIDを含みます。

これで、SilverlightクライアントはステートレスWebサービスにアクセスでき、Webサービスは、要求が関連するログインユーザーを認識します。

私はWebServiceとWebRoleを分離して、CPUの重いジョブをサービスで処理できるようにし、Webの役割をWebページに適切かつ迅速に提供できるようにしました。

これは役に立ちますか?

于 2012-08-13T08:17:44.997 に答える