DNN Web API 服务中的基本身份验证

Basic auth in DNN Web API service

我正在为 DNN 构建一个库类型模块,它将容纳一个 Web API 服务,该服务旨在由单独的应用程序调用。它有一个继承自 DnnApiController 的控制器。我希望此服务中的请求使用基本身份验证,因为另一个应用程序与 DNN 没有关联,并且它的用户不会与门户交互。它所能做的就是传递用户名和密码(这将通过 SSL 进行)。我们是 运行 DNN 7.3,配置为使用标准表单身份验证。

是否可以仅将此服务配置为使用基本身份验证?如果是这样,我需要什么 attributes/configuration 才能让它发挥作用?

我认为您可以使用 DNNAuthorize 属性执行此操作。首先,我会在 DNN 中添加一个角色,例如 "ExternalApp"。然后创建一个具有该角色的 DNN 用户。

使您的 Web 服务代码如下所示:

public class MyAPIController : DnnApiController
{
    [HttpGet]
    [DnnAuthorize(StaticRoles="ExternalApp")]
    public string Ping()
    {
        return "MyAPI Version 01.00.00";
    }
}

然后在你的外部应用程序中(假设它是用 C# 编写的),你可以这样做:

string scheme = "https://";
string domainAlias = "www.website.com";
string modulePath = "myapimodule";
string controllerName = "myapi";
string apimethod = "ping";

Uri serviceUri = new Uri(string.Format("{0}{1}/DesktopModules/{2}/API/{3}/{4}", scheme, domainAlias, modulePath, controllerName, apimethod));
HttpWebRequest httpReq = (HttpWebRequest)HttpWebRequest.Create(serviceUri);
httpReq.Credentials = new NetworkCredential("externalappUser", "password123");
httpReq.Method = "GET";
httpReq.Accept = "application/text";

httpReq.BeginGetResponse(HttpWebRequestCallBack, httpReq);