私はDNNの実装を書いたので、どのように動作するかについて説明します。私はServiceStackの詳細を知らないので、そこにそれをどのように適用するかは言えません。私が最初にこれを構築しようとしたとき、私はそれが実際よりもはるかに複雑であることを期待しました。実際には、コアにはほんの一握りの呼び出しが必要です。
コンテキストの確立と認証は、DnnControllerの初期化中に行われます。すべてのオープンソースであるDNNの素晴らしい点の1つは、これらすべての種類の詳細が公開されていることです。ここでDnnController.cs
そして、ここへのリンクが最も興味深いビットですされています
protected override void Initialize(RequestContext requestContext)
{
base.Initialize(requestContext);
LoadDnnContext(requestContext.HttpContext);
AuthenticateRequest(requestContext.HttpContext, PortalSettings.PortalId);
}
protected virtual void AuthenticateRequest(HttpContextBase context, int portalId)
{
if (!context.Request.IsAuthenticated)
{
BasicAuthenticator.Instance.TryToAuthenticate(context, portalId);
}
if (!context.Request.IsAuthenticated)
{
DigestAuthenticator.Instance.TryToAuthenticate(context, portalId);
}
MembershipModule.AuthenticateRequest(context, true /*allowUnknownExtension*/);
}
protected virtual void LoadDnnContext(HttpContextBase context)
{
var domainName = TestableGlobals.Instance.GetDomainName(context.Request);
var alias = TestablePortalAliasController.Instance.GetPortalAliasInfo(domainName);
int tabId;
ValidateTabAndModuleContext(context, alias.PortalID, out tabId);
var portalSettings = new PortalSettings(tabId, alias);
context.Items["PortalSettings"] = portalSettings;
}
サービスフレームワークは、フォーム{ユニークなポータル・パス}/DesktopModules/{ModuleNameを}/API/{にすべてのルートを強制的にurl}固有のポータルパスは、要求が送信されたポータルを簡単に識別するために重要です。ほとんどの場合、DNNは/Default.aspx?portalid=nという形式のURLを許可しますが、Service Frameworkはこれを受け入れません。要求パスがポータルエイリアスと一致する必要があります。 mysite.com/childportal/ ...この要件は、GetDomainName()が機能することを保証します。
TestableXXXクラスは内部名前空間にあり、公式公開APIの一部ではなく、リリース間の変更を壊すことがあります。クラスのメソッドのほとんどは、模擬するのが難しいパブリックなアナログを持っていますが、そうでなければ同等です。サーバーをアップグレードする前に小規模なコード修正を行うことが合理的な場合は、Testableを自由に使用してください。サーバーのアップグレードを完全に制御できない場合は、.Internal名前空間を使用しないでください。
Service Frameworkは、特定のモジュールインスタンスのアクセス許可に対する認証をサポートしています。モジュールに結び付けられたサービスは、プロバイダタブとモジュールIDでなければなりません。サービスがモジュール固有でない場合は、これを省略して、PortalSettingsで-1のタブIDを使用します。
ServiceFrameworkは、MVCがそれらを提供しないため、独自の基本およびダイジェスト認証の実装を持っています。私はServiceStackがBasicとDigestを提供することを信じているので、おそらくMembershipModule.AuthenticateRequest()を呼び出すだけでよいでしょう。
DNN互換ライセンス(例えば、MITなど、GPLではなく)でServiceStack実装をリリースしたい場合は、私は非常に支援したいと思います。 – ScottS
SSとDNNを統合しようとします。それがうまくいくなら、私はMITライセンスの下でリリースするでしょう。 – SoftwareWeaver
DotNetNukeでサービスマンが働いたことはありますか? –