0

IIS でホストされ、セキュリティや認証をまったく提供しないサードパーティのデータ視覚化ツール (Silverlight で作成) があります (つまり、サーバーにアクセスでき、URL を知っている場合は、公開されているすべてのデータを表示できます。 ODBC 接続の資格情報)。ログインしたユーザーに基づいて適切な認証とアクセス制限を提供する別のアプリケーションを作成しました。サードパーティのアプリを「保護」するための現在の解決策は、ユーザーがアプリからアクセスしたことを確認することです。URL をチェックするために Referer ヘッダーを介してそれを行っているようです。

既存の認証とアクセス許可を使用してサード パーティ アプリケーションへのアクセスを制御するモジュールをパイプラインに追加できるかどうか疑問に思っています (現在、セッション認証とフォーム認証を組み合わせて使用​​していますが、クレームで書き換える可能性があります)。うまくいくように聞こえますが、そのようなことを試した経験のある人はいますか? 落とし穴?全体的に悪い考えですか?

更新: エントリ ポイントとしていくつかのページを持つ単なる ASP.Net アプリであることをベンダーに確認したので、フォーム認証を追加できるはずです。共有フォーム Cookie を使用できるようにしようとしていますが、今のところうまくいきません。私たちのサイト (localhost/MainApp) とベンダー サイト (localhost/Vendor) の各 web.config にこれがあります。

<authentication mode="Forms">
  <forms name=".ASPXFORMSAUTH" loginUrl="Login.aspx" protection="All" timeout="20" path="/" />
</authentication>
<machineKey
  validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"
  decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F"
  validation="SHA1"/>

記録として、これらは本番環境で使用するキーではなく、MSDN サンプルから取得したものです。

ベンダーの global.asax ファイルを更新して (インストーラーで既に実行しています)、以下を追加しました。

protected void FormsAuthentication_OnAuthenticate(object sender, FormsAuthenticationEventArgs args)
{
    System.Diagnostics.Debug.WriteLine("FormsAuthentication_OnAuthenticate");
    if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
    {
        System.Diagnostics.Debugger.Break();
        try
        {
            FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value);
            args.User = new System.Security.Principal.GenericPrincipal(new FormsIdentity(ticket), new string[0]);

            if (!args.User.Identity.IsAuthenticated)
            {
                Context.Response.Redirect("~/Error.htm");
            }
        }
        catch (Exception e)
        {
            Context.Response.Redirect("~/Error.htm?" + e.Message);
            // Decrypt method failed.
        }
    }
    else
    {
        Context.Response.Redirect("~/Error.htm?CookieNotFound");
    }    
}

しかし、今は「データを検証できません」というメッセージが表示されます。フォーム タグからドメインを削除した後、認証が機能するようになりました。サービス コールからそれを削除するだけで、準備は完了です (そうです、これでサービスが世界中に、または少なくともイントラネットにアクセスできるすべての人に開放されます)。

4

2 に答える 2

1

.xap ファイルはありますか? フォーム認証で保護したいのですがよろしいですか?IIS で .xap 拡張子のハンドラー マッピングを追加し、それを ASP.NET にマップすることをお勧めします。さらに一歩進んで、実際に .xap ファイルをストリーミングする中間ページまたはハンドラーを作成できます。このように、フォーム認証によって保護されます。以下にいくつかの議論を示します (Flash SWF ファイルを使用していますが、概念は同じです)。

ASP.NET を使用して SWF ファイルへのアクセスを保護する方法は?

http://www.justskins.com/forums/file-types-not-protected-157682.html

Silverlight アプリケーションは、ホストしている Web サービスも呼び出しますか? おそらく、それらも確実に保護する必要があります。

編集: また、それらを 2 つの別個のアプリケーションとしてセットアップしていることにも注意しました。.NET フレームワークが 2 つの間で類似している場合は、Silverlight ベースのアプリケーションを ASP.NET アプリケーションの下の子アプリケーションとしてセットアップしてみてください。フォーム認証設定はそのように継承する必要があります..

于 2013-02-20T16:18:58.457 に答える
0

Silverlight は html ファイル (ブラウザー ベース) でホストする必要があります。場所に配置しても問題ありませんが、その場所へのリダイレクトを使用できます。これは、フォーム認証されたページからのみアクセスできます。

ログイン Cookie の要件を、Silverlight アプリを提供する html/aspx ページに追加できます。

于 2013-02-20T21:12:54.763 に答える