.Net アプリをまったく変更せずにこれを実行できるとは思いませんが、最小限の変更で実行できる可能性があると思います。ポータルが .Net Web アプリケーションに送られるすべてのものをゲートウェイ化すると仮定していることに注意してください。つまり、ポータルはブラウザーからすべての HTTP 要求を取得し、独自のヘッダーを追加し、要求を .Net アプリに送信し、.Net アプリから応答を取得し、さらに書き直してから、ブラウザーに情報を返します。 .
今何が起こっているのか (この質問を書いた理由) は、この .Net アプリをポータルのポートレットに埋め込んでいると推測していますが、誰かがそれを参照しようとすると、ポータルにログインしているにもかかわらず、ポートレット ボックス内の外部 .Net ログイン画面。とても素敵ではありません。
ここでは、次の 2 つの手順を実行する必要があります。
- .Net アプリのログイン ページをやり直して、ポートレット ユーザーを自動ログインさせます。
- #1 と連携するカスタム メンバーシップ プロバイダーを作成する
1. .Net アプリのログイン ページをやり直して、ポートレット ユーザーを自動ログインさせます。
.Net アプリのログイン ページを見つけます。おそらく login.aspx のようなものになります。それ (および関連するコードビハインド ファイル) を portallogin.aspx と portallogin.cs にコピーします。portallogin.aspx および portallogin.cs ファイルを開きます。そこにあるすべてのコントロールとコードを取り除きます。以下に示すようなものに置き換えます。PORTAL_SomeFunctionName が表示されている場合は、適切な関数呼び出しを行うポータルの SDK のコードに置き換える必要があることに注意してください。
const string specialpassword = "ThisPasswordTellsTheBackendSystemThisUserIsOK";
Page_Load()
{
if (PORTAL_IsLoggedInToPortal())
{
string username = PORTAL_GetCurrentUserName();
// Authenticate the user behind the scenes
System.Web.Security.FormsAuthentication.SetAuthCookie(username, false);
System.Web.Security.FormsAuthentication.Authenticate(username, specialpassword);
}
else
{
throw new Exception ("User isn't coming from the Portal");
}
}
次に、.Net アプリケーションの web.config を編集し、ログイン ページが login.aspx ではなく portallogin.aspx であることを伝えます。
これにより、ユーザーのログインが自動的に試行されます。
2. #1 と連動するカスタム メンバーシップ プロバイダーを作成する
ここで、カスタム メンバーシップ プロバイダーを作成する必要があります。これを機能させるには、使用している .Net アプリケーションでメンバーシップ プロバイダーを使用し、カスタム メンバーシップ プロバイダーを使用できるようにする必要があります。
新しいメンバーシップ プロバイダーを作成します。クラスを作成し、System.Web.Security.MembershipProvider から継承する必要があります。少なくとも、GetUser および ValidateUser 関数と ApplicationName プロパティを実装する必要があると思います。以下は、それらがどのように見えるかについてのいくつかのアイデアです。オーバーライドする必要がある関数は他にもたくさんありますが、スタブ (付随する NotImplementedException(s) を含む) はおそらくそのままにしておくことができます。
public override string ApplicationName
{
get
{
return "Portal";
}
set
{
;
}
}
private const string specialpassword =
"ThisPasswordTellsTheBackendSystemThisUserIsOK";
public override bool ValidateUser(string username, string password)
{
// If the password being passed in is the right secret key (same
// for all users), then we will say that the password matches the
// username, thus allowing the user to login
return (password == specialpassword);
}
public override MembershipUser GetUser(string username, bool userIsOnline)
{
string email = PORTAL_getemailfromusername(username);
System.Web.Security.MembershipUser u = new MembershipUser(
this.name, username, username, email, "", "", true, false,
DateTime.Now(), DateTime.Now(), DateTime.Now(),
DateTime.Now(), DateTime.Now(), DateTime.Now()
);
return u;
}
.Net RoleProvider と ProfileProvider の機能がこの .Net アプリとの統合に役立つ場合は、同様の実装を行うこともできます。(Role プロバイダーはグループ メンバーシップ情報を提供し、ProfileProvider は、電子メール アドレス、郵便番号、または各ユーザーに提供するその他のプロパティなど、追加のプロファイル情報を提供します。この情報は、データベースから、またはポータルの HTTP ヘッダー情報から。
その他の考慮事項
この外部 .Net アプリケーションにサード パーティの認証プロバイダーを使用しているため、どのユーザー/グループが管理者であるかをこの .Net アプリケーションに伝える方法を理解する必要があります。私はあなたにそれを言うことはできません.サードパーティの.Netアプリケーションからそれを見つける必要があります. これは、この .Net アプリケーションでアカウントを持つ以外に何かを行うために必要なアクセス許可がある場合に必要です。
これはポータルで使用しているため、いくつかの使用方法があります。.Net Web アプリケーション全体を表示する 1 つの大きなポートレットだけを持つことができます。また、.Net Web アプリケーションの一部を表示する小さなポートレットを多数作成することもできます。いずれにせよ、ポータル ページの小さなポートレット ボックス内に完全な .Net アプリケーションを配置する場合、ポータルが適切にレンダリングする場合とレンダリングしない場合があることを考慮する必要があります。HTML の見た目や動作がおかしくなったら、それを修正するのは面倒です。元の .Net Web アプリを修正して別の HTML を吐き出すか、IIS にモジュールを追加してその場で HTML を書き換えることができます (それがモジュールであるかどうかは完全にはわかりません... IIS を掘り下げて、これを行う方法を理解する必要があります)。
うわー!
これがすべてを網羅しているわけではないことはわかっていますが、Microsoft の SQL Server Reporting Services の認証ソースとして Plumtree Portal (現在は BEA の Aqualogic User Interaction) を設定する作業を行い、IIS ベースのカスタム認証プロバイダーを実装しました。 Dynamics NAV テーブルに格納されているユーザー メンバーシップ。これらのプロジェクトでの私の経験が、この外部 .Net アプリケーションをポータルに統合する際に役立つことを願っています。
Tim