我正在为 DotNetNuke 6 网站构建一个 REST API,使用 DNN 的基于 MVC 的服务框架。但是,我没有任何身份验证背景,所以我什至不确定从哪里开始。
基本上,我们希望我们的客户能够对他们的门户数据发出 GET 请求,并且我们希望一些客户(但不是全部)能够发布对其用户数据的简单更新。
我一直在尝试搜索信息,但问题是我不确定我在搜索什么。DNN 有不同的登录名和角色,但我不确定它们是否或如何影响。我听说过 oAuth 之类的东西,但我对它的理解是最基本的。我不知道它是否是我需要的,也不知道它是否或如何适用于 DNN。谁能指出我正确的方向?
更新:基于以下关于将其与模块绑定和进一步研究的答案,这是我所做的:
我专门为此服务创建了一个模块,并为它添加了两个特殊权限:“APIGET”和“APIPOST”。我将这些分配给 DNN 中的一些测试角色/测试帐户。我编写了一个自定义授权属性,给定模块 ID,检查当前用户是否具有必要的权限(通过角色或直接)。据我所知,标签 ID 与我的情况无关。
它似乎同时使用网络浏览器(基于我登录的 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";
}
}