DNN の MVC ベースのサービス フレームワークを利用して、DotNetNuke 6 Web サイト用の REST API を構築しています。ただし、認証のバックグラウンドがないため、どこから始めればよいかさえわかりません。
基本的に、クライアントがポータルのデータに対して GET リクエストを作成できるようにし、一部のクライアント (すべてではない) がユーザー データの簡単な更新を POST できるようにしたいと考えています。
情報を検索しようとしていますが、何を検索しているのかわからないのが問題です。DNN にはさまざまなログインとロールがありますが、それらが考慮されているかどうか、またはどのように考慮されているかはわかりません。oAuth などについては聞いたことがありますが、それについての私の理解は最も基本的なレベルです。それが必要なものかどうか、またそれが DNN にどのように適用されるかはわかりません。誰かが私を正しい方向に向けることができますか?
更新:モジュールとの結び付けとさらなる調査に関する以下の回答に基づいて、私が行ったことは次のとおりです。
このサービス専用のモジュールを作成し、「APIGET」と「APIPOST」という 2 つの特別なアクセス許可を追加しました。これらを DNN のいくつかのテスト ロール/テスト アカウントに割り当てました。モジュール ID を指定して、現在のユーザーが必要なアクセス許可を持っているかどうかを確認するカスタムの authorize 属性を作成しました (ロールを介して、または直接)。私の知る限り、タブ ID は私の場合は関係ありません。
Web ブラウザー (ログインしている DNN アカウントに基づく) と、アカウントのユーザー名/パスワードを使用して HTTP 要求を送信する php スクリプトの両方で動作しているようです。
認証属性:
using DotNetNuke.Entities.Modules;
using DotNetNuke.Entities.Portals;
using DotNetNuke.Security;
using DotNetNuke.Security.Permissions;
using System.Web;
public class MyAuthorize : DotNetNuke.Web.Services.AuthorizeAttributeBase
{
public const string AuthModuleFriendlyName = "MyAuthModule";
public const string GETPermission = "APIGET";
public const string POSTPermission = "APIPOST";
public string Permission { get; set; }
protected override bool AuthorizeCore(HttpContextBase context)
{
ModuleController mc = new ModuleController();
ModuleInfo mi = mc.GetModuleByDefinition(PortalController.GetCurrentPortalSettings().PortalId, AuthModuleFriendlyName);
ModulePermissionCollection permCollection = mi.ModulePermissions;
return ModulePermissionController.HasModulePermission(permCollection, Permission);
}
}
コントローラー: (「mytest」は GET と POST の両方のエンドポイントです)
public class MyController : DnnController
{
[ActionName("mytest")]
[AcceptVerbs(HttpVerbs.Get)]
[DnnAuthorize(AllowAnonymous = true)]
[MyAuthorize(Permission = MyAuthorize.GETPermission)]
public string myget(string id = "")
{
return "You have my permission to GET";
}
[ActionName("mytest")]
[AcceptVerbs(HttpVerbs.Post)]
[DnnAuthorize(AllowAnonymous = true)]
[MyAuthorize(Permission = MyAuthorize.POSTPermission)]
public string mypost(string id = "")
{
return "You have my permission to POST";
}
}