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の役割とマージする必要がありますか?
両方の役割のマシンキーは同じです。